Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GDI+: Farbe eines Pixels ermitteln (https://www.delphipraxis.net/160676-gdi-farbe-eines-pixels-ermitteln.html)

Jazzman_Marburg 25. Mai 2011 18:39

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:
gBitmap : IGPBitmap;

gBitmap := TGPBitmap.Create(Filename);
Jetzt dachte ich ein gBitmap.GetPixel oder so ähnlich würde es geben, aber ich finde nichts derartiges.
Kann mir jemand auf die Sprünge helfen?

Vielen Dank
Jazzman

implementation 25. Mai 2011 20:58

AW: GDI+: Farbe eines Pixels ermitteln
 
Scheint's aber zu geben ...

[edit]
Falls deine Lib das nicht hat, binds dir aus der GDI+ Flat API selbst ein:
Code:
GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap* bitmap, INT x, INT y, ARGB *color)
aus der gdiplus.dll

Jazzman_Marburg 25. Mai 2011 21:07

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

Jazzman_Marburg 25. Mai 2011 21:18

AW: GDI+: Farbe eines Pixels ermitteln
 
Zitat:

Zitat von implementation (Beitrag 1102927)
Scheint's aber zu geben ...

[edit]
Falls deine Lib das nicht hat, binds dir aus der GDI+ Flat API selbst ein:
Code:
GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap* bitmap, INT x, INT y, ARGB *color)
aus der gdiplus.dll

Huuch -- ich hatte Tomaten auf den Augen. In der van Bilsen GDIPlus.pas steht es auch!

Vielen Dank für den Hinweis -- einfach die Bäume nicht gesehen.

Schönen Abend!
Jazzman

Jazzman_Marburg 27. Mai 2011 19:04

AW: GDI+: Farbe eines Pixels ermitteln
 
Es ist zum Harreraufen!
Ich verstehe es echt nicht :pale:

Wie komme ich mit GDI+ an die Methoden:
  1. Bitmap.GetPixel(x, y, c)
  2. Bitmap.LockBits()
  3. Bitmap.GetHBitmap()
ran?
Ich verstehe einfach nicht von welchem Typ die Variable "Bitmap" sein muß, und wie ich sie erzeuge.
Das habe ich versucht:
  • Var Bitmap : IGPImage; [...] Bitmap := IGPBitmap.Create(Filename);
  • Var Bitmap : TGPBitmap; [...] Bitmap := TIGPBitmap.Create(Filename);
  • Var Bitmap : GPBitmap; [...] Bitmap := GPBitmap.Create(Filename);

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

rollstuhlfahrer 27. Mai 2011 19:09

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

Jazzman_Marburg 27. Mai 2011 19:20

AW: GDI+: Farbe eines Pixels ermitteln
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1103372)
Aber ein Link dort hin wäre nicht schlecht.
Bernhard

Aber sofort: http://www.bilsen.com/gdiplus/index.shtml

Ein Köngreich für eine Hilfe aus diesem Gestrüpp! :shock:

Lieben Dank!
Jazzman

Medium 27. Mai 2011 19:30

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);

Jazzman_Marburg 27. Mai 2011 19:49

AW: GDI+: Farbe eines Pixels ermitteln
 
Nur noch eine kleine Nachfrage :oops:

Delphi-Quellcode:
gBitmap : GPBitmap;
Farbe : TGPColor;
[...]
gBitmap := TGPBitmap.Create(Filename);
GdipBitmapGetPixel(gBitmap, x, y, Farbe);
Dieser Aufruf endet mit einem Fehler:
"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

Medium 27. Mai 2011 20:06

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 12:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz