pixel von Bitmap auslesen
-
Hallo Forum,
Ich habe nun alles was zur Windowsprogrammierung gehört ausprobiert und damit herumgespielt, nun möchte ich etwas tiefer gehen ...Ich habe später mal vor in die einzelnen bytes einzutauchen, aber bis dahin ist es noch sehr weit^^
Ich würde mich gerne an etwas einfacherem versuchen, und zwar ein wenig mit pixeln experimentieren.
mit meinem momentanigen wissen kann ich alles machen was ich vor habe, nur eines fehlt mir dazu ...
Mich interessiert wie ich von einem bitemap, zum beispiel von pixel 1, 21,
also den pixel in der ersten spalte und in der 21 reihe an die rgb farbe ran komme.alsoo das ich den anteil von rot, grün und blau des pixels auslese und jeweils in 3 fariablen speicher ??
Ich bedanke mich für jede hilfe

-
Einfachste (und lahme) Möglichkeit:
- Die Bitmap in einen DC selektieren.
- GetPixel() / SetPixel()
GetPixel liefert dabei einen COLORREF zurück.
Mittels GetRValue(), GetGValue(), GetBValue() kann man den in die einzelnen Farbwerte zerlegen.Ansonsten gibt es auch z.B. noch GetDIBits()
-
danke, ich werde mal die winapi doku durforsten

Falls ich noch fragen habe werde ich mich morgen nochmal melden, muss jetzt langsamm nach hause^^
Nochmals danke!
-
Ich habe gegoolt und in der msn gesucht, konnte aber nicht herausfinden wie ich das anwende

kennt jemand da eine gute anleitung zu?
-
An welcher Stelle hängst du?
-
Ne habe es jetzt doch noch hinbekommen, wenn man selber denkt ist man wohl noch am besten^^
konnte bei google etc nix brauchbares finden, und jetzt habe ich mal versucht meinen eigenen kopf zu benutzen xD
Nun würde mich mal interessieren, wie ich einen 5 dimensionalen array mache^^
also mein programm sieht im moment so aus, ich habe eine bitmap, daraus lese ich mit 2 for schleifen alle pixel des bitmaps aus und speicher diese pixel in einem coloref[][], also einem coleref mit einem zweidimensionalesn array.
Der array enthält die x und y werte des pixels, also die positionen.
Nun möchte ich das selbe mit anderen bitmaps gleichzeitig machen, also muss der array zu einem dreidimensionalen array werden, der dann wie folgt aussehen sollte:bitmap[1][63][21]
der erste array steht für welches bitmap dieser pixel ist.
der zweite und dritte sind die positionen vom nullpunkt der bitmaps aus gesehen.Nun muss ich nioch positionen einbringen wo ich das bitmap anzeigen will, da ale bitmaps ja schließlich nicht an einer position bleiben sollen, sondern verschiedene haben sollten.
dann würde der coloref so aussehen (hoffe ich mal)
bitmap[1][63][21][5][5] ;
Die beiden letzten arrays stehen für die position der bitmaps .
liege ich da rihtig oder falsch?ich weiß das ich ein bitmap auch ganz einfach mit Bitblt anzeigen kann, will aber tiefere einblicke in die GDI machen, und was alles möglich ist

Achja, ein dreidimensionaler array wird so aufgebaut oder?
COLOREF A[][][];
Oder?
schonmal danke

-
ich weiss ja nicht, was genau du beabsichtigst, aber im prinzip wäre so etwas ein guter ansatz:
struct bitmap_buffer { int xpos, ypos; // Einfügeposition struct bitmap* pbmp; } struct bitmap_buffer[ANZAHL_DER_BITMAPS]; bitmap_buffer[0].xpos = x; bitmap_buffer[0].ypos = y; bitmap_buffer[0].pbmp = pbmp; // uswdie pixeldaten selbst kannst du auch mit c-pur, ohne windows-api auslesen.
guck dir dazu mal die strukturen BITMAPFILEHEADER und BITMAPINFOHEADER an.
die kann man sich auch selbst schreiben und dann bmp-dateien bearbeiten.
allerdings ist ein bisschen kenntnis über das bmp-format notwendig.
das ist aber nicht soooo schwer.
-
Hallo,
ich habe zur Zeit ein ähnliches Problem. Ich möchte mir auch die Informationen, also luminanz (hoffe das wird so geschrieben) usw. auslesen.
Wie kann ich das machen?
Ich komme echt nicht weiter!
Danke im VorausGruß
Dorschty
-
Luminanz (Helligkeit) wird in Bitmaps nicht gespeichert, kann aber über diese Formel einfach errechnet werden:
Y = 0.299 * Rot + 0.587 * Grün + 0.114 * BlauFür Alpha-Werte (Transparenz-Zeugs) gibt es meines Wissens keinen eindeutigen Standard bei Bitmaps - die mir bekannten WinAPI Bitmap-Ladefunktionen (inkl. GDI+) ignorieren allesamt Alpha-Werte. Für Alpha-Werte würde ich stattdessen lieber png nutzen, die kann gdi+ dann glaube ich auch korrekt laden.
-
Hallo, also es ist ewig her das ich mal in C++ reingeschaut habe, das heißt ich weiß eigentlich nichts mehr. Mein Problem ist folgendes, ich brauche ein Programm in welches ich ein bmp-file einlesen kann. Pixelgröße ist bekannt, sollte aber wenn möglich Variabel sein (Abfrage am Anfang?) oder aber automatisches erkenn durch das Programm.
Auf jeden fall sollte das Programm das bmp-file pixel für pixel auslesen, dann sowohl die coordinaten und die RGB-werte auslesen und als file zurückgeben. Ich habe zwar hier im Beitrag sachen gefunden die dem ähneln aber nicht genau entsprechen was ich suche. Das file benötige ich um später Statistikberechnungen über die einzelnen Zahlenwerte laufen lassen zu können. Wenn mir jemand eine Starthilfe geben könnte wäre echt super. Vielen Dank