PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Softwaredesign: Wie Bildbearbeitung aufbauen?



axeljaeger
10-06-2004, 19:15
Ich möchte gerne eine kleine Bildbearbeitung programmieren. Da möchte ich mir jetzt vorher mal richtig Gedanken machen, wie ich das Programm intern aufbauen soll. Da hab ich vorhin folgendes Classchart zusammengezimmert, zu dem ich gerne Meinungen hören würde. Dabei fände ich besonders interessant zu erfahren, ob dieses ach so gut durchdachte Design überhaupt schnell implementierbar ist (Jeder Pixel würde ettliche Funktionsaufrufe erforden).

axeljaeger
10-06-2004, 19:17
Leider hab ich das Classchart vergessen, an den Thread anzuhängen, so dass ich es hier nochmal anhängen muss:

Sym
11-06-2004, 09:35
Hi,

was für Dateiformate möchtest Du denn unterstützen? In manchen Header-Files steht ja schon der Bildtyp drin. Oder sollen wirklich nur rga-Typen eingelesen werden können?

Warum meinst Du, dass jeder Pixel etliche Schleifen über sich ergehen lassen muss? Und wie hast Du Dir das Layer, Channel, Tile vorgestellt? Was soll jede Stufe bewirken?

Ich persönlich würde Image und Interpreter teilen.

Es gäbe dann ein allgemeines Image und davon könnten die anderen BildTypen-Klassen dann erben. Durch den Header der Bild könntest Du somit gleich den richtigen Konstruktor nutzen.

Aber vielleicht solltest Du Dein System erst einmal näher erläutern.

axeljaeger
11-06-2004, 11:13
An Formate hab ich erstmal noch nicht gedacht, in meiner neuesten Fassung heist der Interpreter auch nicht mehr Interpreter, sondern ColorSpace. Es geht darum, nicht nur RGB zu unterstützen. Meine Idee war es, jeden Kanal intern als Graustufenbild zu speichern und mittels dem Interpreter daraus RGB zu machen. Speziell beim RGB-Interpreter würden da nur die Pixel aus den Kanälen weitergeleitet. Da denke ich, kommt einiges an Overhead. Deswegen wüsste ich gerne, auch wenn Adobe mir das nicht verraten wird, wie die intern die Bilddaten handeln.

Um meine Skizze nochmal zu kommentieren: ImageLayer ist eine Ansammlung von Kanälen, Channel ist ein Kanal aus Graustufenbild und Tile ist ein kleiner Teil, z.B. 64x64 Punkte, um das System überschaubar zu halten und nicht zu größe Datenmengen auf einmal zu haben. Ich dachte auch erst an die Möglichkeit, dadurch immer nur die veränderten Kacheln zu zeichnen, aber ich weis noch nicht, ob jeder Teil des Programms auf die Tiles zugreifen können soll.

axeljaeger
11-06-2004, 11:54
Und hier das neue Classchart. Weitergedacht müssten in Colorspace alle Funktionen enthalten sein, um zwei Bilder eines Colorspaces überinander zu legen "blitten" und auch Ebeneneffekte wie zwei Ebenen multiplizieren und so weiter.

Edit: Ich glaube langsam, Photoshop arbeitet intern immer mit RGB oder einem anderen Farbmodell: Wenn ich mit CMYK arbeite, muss ich im Kanalmixer trotzdem rot, grün und blau einstellen. Ich verabschiede mich langsam vom Gedanken, einen Farbraum in eine Klasse kapseln zu können, da ich so Sachen wie Helligkeit, Kontrast und Tonwert in diese Klasse packen müsste. Das gefällt mir nicht so gut, ich muss warten, bis ich eine bessere Idee hab.