![]() |
GDI+: Farbe eines Pixels ermitteln
Hallo, Hallo!
Ich tu mich gerade schwer damit, aus einem Bitmap die Farbe eines Pixels zu ermitteln -- irgendwie war ich der Meinung, ein GetPixel(x, y) müßte es doch sicher geben. Aber bei der eingesetzten GDI+ Lib Von Erik van Bilsen finde ich nix.
Delphi-Quellcode:
Jetzt dachte ich ein gBitmap.GetPixel oder so ähnlich würde es geben, aber ich finde nichts derartiges.
gBitmap : IGPBitmap;
gBitmap := TGPBitmap.Create(Filename); Kann mir jemand auf die Sprünge helfen? Vielen Dank Jazzman |
AW: GDI+: Farbe eines Pixels ermitteln
![]() [edit] Falls deine Lib das nicht hat, binds dir aus der GDI+ Flat API selbst ein:
Code:
aus der gdiplus.dll
GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap* bitmap, INT x, INT y, ARGB *color)
|
AW: GDI+: Farbe eines Pixels ermitteln
Ok, ich formuliere um (in der Hoffnung, es hört jemand zu :( ):
Ich habe da ein PNG-File, es ist 256 Pixel breit und 4 Pixel hoch. Ich möchte aus diesem die Farbe jedes Pixels ermitteln und anschließend mit dieser Farbe gefüllte Rechtecke (256x4 Stück) mit GDI+ zeichnen. Ich komme also von der Idee ab, die Farbwerte mittels GDI+ zu ermitteln (ich weiß nicht ob es damit grundsätzlich nicht geht, oder ich einfach nicht die Tür dorthin finde), sondern zunächst normale GDI Tools zu nutzen und erst anschließend GDI+ zum zeichnen zu verwenden. Ist das wohl möglich? Also PNG im 'Hintergrund' (es soll ja nicht sichtbar werden) laden, Farbwerte ermitteln und dann mit GDI+ malen. Das Malen der Rechtecke ist nicht das Problem -- die Farbermittlung dagegen schon. Jemand dazu wohl eine Idee? Danke & Gruß Jazzman |
AW: GDI+: Farbe eines Pixels ermitteln
Zitat:
Vielen Dank für den Hinweis -- einfach die Bäume nicht gesehen. Schönen Abend! Jazzman |
AW: GDI+: Farbe eines Pixels ermitteln
Es ist zum Harreraufen!
Ich verstehe es echt nicht :pale: Wie komme ich mit GDI+ an die Methoden:
Ich verstehe einfach nicht von welchem Typ die Variable "Bitmap" sein muß, und wie ich sie erzeuge. Das habe ich versucht:
Keine diese Arten liefert ein Methode .GetPixel(), LockBits() oder GetHBitmap(). Dann habe ich die GDIPlus.Pas danach durchsucht, und finde tatsächlich: //---------------------------------------------------------------------------- // Bitmap APIs //---------------------------------------------------------------------------- [...] { GdipBitmapGetPixel(GpBitmap* bitmap, INT x, INT y, ARGB *color); } function GdipBitmapGetPixel(Bitmap: GpBitmap; X: Integer; Y: Integer; out Color: ARGB): TGPStatus; stdcall; external GdiPlusDll; { GdipBitmapSetPixel(GpBitmap* bitmap, INT x, INT y, ARGB color); } function GdipBitmapSetPixel(Bitmap: GpBitmap; X: Integer; Y: Integer; Color: ARGB): TGPStatus; stdcall; external GdiPlusDll; [...] Aber ich habe nicht den leiseten Schimmer, wie ich an diese Methoden rankomme -- bzw. ein Bitmap Objekt erzeuge, welches diese Methoden hat. Kann hier vielleicht jemand helfen? Wäre euch sehr dankbar. Gruß Jazzman |
AW: GDI+: Farbe eines Pixels ermitteln
Also: GPBitmap ist ein Pointer. In der Lib, die ich benutze müsste man dazu manuell den Member NativeImage herausführen. Wie das jetzt bei deiner ist, kann ich nicht sagen. Aber ein Link dort hin wäre nicht schlecht.
Bernhard |
AW: GDI+: Farbe eines Pixels ermitteln
Zitat:
![]() Ein Köngreich für eine Hilfe aus diesem Gestrüpp! :shock: Lieben Dank! Jazzman |
AW: GDI+: Farbe eines Pixels ermitteln
Die GpBitmap Klasse hat diese Methoden nicht als Member, sondern dies sind nicht klassengebundene Funktionen (aus einer DLL), die du einfach so aufrufst, und das gewünschte GpBitmap als ersten Parameter einstöpselst.
Delphi-Quellcode:
// nicht
HierStehtNachherDieFarbeDrin := MyGpBitmap.GetPixel(x, y); // sondern GdipBitmapGetPixel(MyGpBitmap, x, y, HierStehtNachherDieFarbeDrin); |
AW: GDI+: Farbe eines Pixels ermitteln
Nur noch eine kleine Nachfrage :oops:
Delphi-Quellcode:
Dieser Aufruf endet mit einem Fehler:
gBitmap : GPBitmap;
Farbe : TGPColor; [...] gBitmap := TGPBitmap.Create(Filename); GdipBitmapGetPixel(gBitmap, x, y, Farbe); "Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen." In der GDIplus.Pas steht ja: { GdipBitmapGetPixel(GpBitmap* bitmap, INT x, INT y, ARGB *color); } function GdipBitmapGetPixel(Bitmap: GpBitmap; X: Integer; Y: Integer; out Color: ARGB): TGPStatus; stdcall; external GdiPlusDll; Was ist da noch falsch? (wirklich peinlich :oops:) Jazzman |
AW: GDI+: Farbe eines Pixels ermitteln
"Farbe" sollte schon vom Typ "ARGB" sein, wie es auch in der Funktionsdeklaration steht ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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