AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI+: Farbe eines Pixels ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

GDI+: Farbe eines Pixels ermitteln

Ein Thema von Jazzman_Marburg · begonnen am 25. Mai 2011 · letzter Beitrag vom 27. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

GDI+: Farbe eines Pixels ermitteln

  Alt 25. Mai 2011, 19:39
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#2

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 25. Mai 2011, 21:58
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

Geändert von implementation (25. Mai 2011 um 22:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 25. Mai 2011, 22:07
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#4

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 25. Mai 2011, 22:18
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#5

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 27. Mai 2011, 20:04
Es ist zum Harreraufen!
Ich verstehe es echt nicht

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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 27. Mai 2011, 20:09
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#7

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 27. Mai 2011, 20:20
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!

Lieben Dank!
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 27. Mai 2011, 20:30
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);
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#9

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 27. Mai 2011, 20:49
Nur noch eine kleine Nachfrage

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 )

Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: GDI+: Farbe eines Pixels ermitteln

  Alt 27. Mai 2011, 21:06
"Farbe" sollte schon vom Typ "ARGB" sein, wie es auch in der Funktionsdeklaration steht
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.
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