zweidimensionaler array
-
Ich komm einfach nicht drauf:
Also: Ich möchte gern ein Bild in einem zweidimensionalen array speichern. Da das ein Graustufenbild ist, reicht es vollkommen aus, nur einen Grauwert pro Pixel zu speichern. Und nun das Problem:
Zu Anfang ist es nicht klar, wie groß der zweidimensionale Array sein soll, in dem das Bild gespeichert werden soll. Wie initialisiere ich so ein zweidimensionales array dann?
Das ganze soll möglichst einfach sein, also sowas wie
Bildpunkt[x][y]-Bildpunkt[x+1][y]=Differenz zweier benachbarter Bildpunkte
Hat jemand eine Idee???
-
Du könntest eine Klasse mit einem Puffer schreiben, die dann immer überprüft, ob die Größe des Arrays überschritten wird und es dann bei Bedarf vergrößert und anschließend den Zeiger überschreibt, so wäre es mittels eines dynamsichen Arrays beispielsweise möglich, könntest noch n paar Operatoren überladen, dass du damit arbeiten kannst, wie mit nem normalen Array
-
So was ähnliches hatten wir doch kürzlich schonmal, oder?
Wie auch immer, entweder du nimmst eine Matrix-Klasse die das wrappt, fuchtelst mit pointer auf pointer durch die Gegendint **mat = new int*[size] ...oder du trickst ein wenig und machst :
std::vector< std::vector<int> > intMatrix;Btw. Mahlzeit.
-
Gut. Ich habe mir jetzt eine Plane-Klasse geschrieben, die die Daten für sich schonmal einliest ... mit Pointern ...
Kennt sich jemand mit FreeImage aus? Dort gibt es zwar die Funktion: FreeImage_ConvertToGreyscale(bitmap), doch wenn ich mir anschaue, was die Funktion zurückliefert, variieren die RGB-Werte ( die ja eigentlich alle gleich groß sein müßten ) um mehrere Werte ... also kein echtes Graubild
?
-
GPC schrieb:
fuchtelst mit pointer auf pointer durch die Gegend
Was im konkreten Fall allerdings keine gute Idee wäre. Bilddaten werden idR linear im Speicher abgelegt.
-
Oha, das hatte ich gar nicht beachtet, hast natürlich recht. Halte den Einsatz dieser Konstruktion eh für ungünstig, fördert nur Fehler.