Hallo,
ich bin heute über ein sonderbares Problem gestoßen:
Ich erstelle eine TImage-Komponente zur Laufzeit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| image_map := TImage.Create(image_map); with image_map do begin Picture.Bitmap.PixelFormat := pf16Bit; Parent := karte; Visible := true; AutoSize := true; Left := 5; Top := 5; Cursor := crHandPoint; OnClick := mapClick; end; |
Danach lade ich ganz normal ein Bild mit verschiedenen Bereichen rein!
Die Bereiche sind farblich unterschiedlich markiert und sofern man sich über einem Bereich befindet, soll ein Infotext erscheinen.
Das ganze muss, soll und geht über die Farberkennung des Bereiches!
Nun wird Anhand eines Pixels auf dem Bild die Farbe des Bereiches individuell für den Computer geholt und in den Array colors: array of TColor; gespeichert:
Delphi-Quelltext
1:
| colors[loop] := image_map.Canvas.Pixels[x,y]; |
Jetzt wird anhand eines Timers mit Intervall 100 die Farbe unter der Maus geholt und ausgewertet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var DC: HDC; pt: TPoint; color_act: TColor; begin GetCursorPos(pt); color_act := GetPixel(DC, pt.x, pt.y); end; |
=============================================
Soviel zur Erläuterung der Aufgabe!
Hat man nun in der Farbtiefe 32bit eingestellt (Windows, nicht mein Programm!!!), so funktioniert alles einwandfrei und ohne Probleme!
Sollte man jedoch 16bit-Farbtiefe eingestellt haben, so erkennt er die Bereiche nicht und liefert unterschiedliche Werte: Die der 1. Array-Wert stimmt nicht mit dem Color-Wert des ersten Bereiches überein!
Woran liegt das?
Hab's auch schon mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var v1: TCanvas; begin GetCursorPos(pt); v1:=TCanvas.create; v1.handle:=GetWindowDC(GetDesktopWindow); color_act := getpixel(v1.handle,pt.x,pt.y); v1.free; end;
var v2 = HDC; begin v2 := CreateDC('DISPLAY',NIL,NIL,NIL); color_act := GetPixel(v2,pt.x,pt.y); deleteDC(v2); end; |
probiert!
Ohne Erfolg! Keine Chance!
Ich verzweifle hier!
S.O.S. - help, please - Hilfe
Freue mich über jede Antwort
gruß
Timelesk