![]() |
Farbinformationen von Bitmap auslesen/ändern
Guten Abend Delphianer!
Ich möchte euch fragen wie ich die Farbdaten eines Bitmaps bekomme. Mit der Eigenschaft Tpixelformat von Tbitmap komme ich an die Farbtiefe heran, was ich aber wissen will, ist ob das Bitmap in YUV oder in RGB gespeichert ist. Und wenn ich dann herausbekomme dass das Bild als RGB gespeichert ist muss ich noch wissen, wie ich es in YUV umwandle. Dann habe ich auch nicht herausfinden können wie ich die farbinformationen zu einem einzelnen pixel auslesen kann, nur wie ich auf ein canvas schreiben kann, und das nutzt mir eigentlich nicht, weil ich nämlich die farbwerte zu jedem einzelnen pixel lesen und schreiben können muss. Für jede Hilfe wäre ich sehr dankbar! Gruß Jan |
Re: Farbinformationen von Bitmap auslesen/ändern
Ein Delphi-BitMap (TBitMap) speichert die Farbwerte nur im RGB-Format ab. (nicht YUV, oder ähnliches)
Code:
BitMap.PixelFormat =
pf1bit > Bitmap mit einem Bit pro Pixel (Schwarzweiß-Palette) pf4bit > Bitmap, das eine Palette mit 16 Farben verwendet pf8bit > Bitmap, das eine Palette mit 256 Farben verwendet Farbpalette für pf1bit, pf4bit oder pf8bit > 32 Bits pro Farbwert (RGB-Komprimierung) pf15bit > True-Color-Bitmap mit 15 Bits pro Pixel (RGB-Komprimierung) pf16bit > True-Color-Bitmap mit 16 Bits pro Pixel (Bitfeld-Komprimierung) pf24bit > True-Color-Bitmap mit 24 Bits pro Pixel pf32bit > True-Color-Bitmap mit 32 Bits pro Pixel (RGB-Komprimierung)
Delphi-Quellcode:
(Angaben ohne Gewähr)
Var X, Y: Integer;
Rot, Gruen, Blau: Byte Farbe: TColor; {Pixel schreiben} BitMap.Canvas.Pixels[X, Y] := RGB(Rot, Gruen, Blau); {Pixel schreiben} Farbe := Rot or (Gruen shl 8) or (Blau shl 16); BitMap.Canvas.Pixels[X, Y] := Farbe; {Pixel lesen} Farbe := BitMap.Canvas.Pixels[X, Y]; Rot := Farbe and $FF; Gruen := (Farbe shr 8) and $FF; Blau := (Farbe shr 16) and $FF; Bei weiteren Fragen siehe OH. |
Re: Farbinformationen von Bitmap auslesen/ändern
Hallo himitsu,
danke für deine Antwort. Leider ist das ganz und garnicht was ich zu hören erhofft hatte. Der erste Source-bereich deines Comments steht ja so in der Delphi-Hilfe, wo ich ihn auch gesehen habe, hilft mir aber leider nicht weiter. Gibt es denn garkeine Möglichkeit in Delphi die Farbwerte in YUV umzuwandeln, in einem Array zu speichern und dann wieder in ein Bitmap auf meiner Platte zu schreiben? RGB nutzt mir nämlich leider nichts, da es in meinem Programm um die Simulierung einer Skalierung von Bildern im YUV-Farbformat geht. Gruß Jan |
Re: Farbinformationen von Bitmap auslesen/ändern
In dem BitMap selber kannst du die Farbwerte nicht als YUV speichern.
Es besteht aber die Möglichkeit den Farbwert als RGB auszulesen, in YUV umsuwandeln, zu bearbeiten (als YUV), wieder zurück umzuwandeln (in RGB) und wieder im BitMap zu speichern (als RGB). Für Umwandlung und so - siehe ![]() Pixel im BitMap => RGB => YUV verarbeiten (als YUV) YUV => RGB => Pixel im BitMap |
Re: Farbinformationen von Bitmap auslesen/ändern
Mein Dank geht nochmal an Himitsu für seine Mühen :thuimb:
Ich hab die Suche auch schon benutzt komme aber anhand der Umwandlung eines 24bit BMPs in ein Grayscale BMP net weiter, weil da nämlich immer in den Prozeduren direkt in Grau umgerechnet wird. Was mir vorerst alle Probleme lösen würde wäre eine Möglichkeit die Farbwerte meines geladenen Bitmaps einfach in YUV umzuwandeln ohne die Farbe mehr als nötig zu verändern und diese dann in einen 2-Dimensionalen Array vom Typ "Packed Record" speichern. Dann könnte ich mit den Farbwerten machen was ich will. Noch eine Anfängerfrage: Wenn Delphi ein BMP auch nicht in YUV darstellen will, kann ich denn dann wenigstens mit Delphi ein YUV BMP auf Platte speichern, oder ist das einfach nicht möglich? Gruß Jan |
Re: Farbinformationen von Bitmap auslesen/ändern
Kann mir da vielleicht noch jemand helfen?
:angle: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz