Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap invertieren (https://www.delphipraxis.net/146215-bitmap-invertieren.html)

Jazzman_Marburg 15. Jan 2010 19:06


Bitmap invertieren
 
Werte Gemeinde!

Ich versuche gerade ein Bitmap zu invertieren -- das klappt aber nur teilweise: d.h. schwarze Linien werden nicht weiss dargestellt, hingegen schwarzer Text schon, merkwürdig nicht wahr?!

Delphi-Quellcode:
 Brush.Color   := ClBlack;
 Pen.Color     := ClBlack;
 PolyLine([Point(300, 300), Point(500, 300)]);

 Brush.Color   := ClWhite; // Schwarzer Text auf weissem Grund
 TextOut(350,280, 'Hallo Hallo Hallo Hallo');

 InvertRect(BMP.Canvas.Handle, BMP.Canvas.ClipRect);
 BMP.Assign(BMP);
Danach sehe ich ein komplett schwarzes Rechteck -- in der Mitte den weissen Text 'Hallo Hallo...' -- wo aber ist die weisse Linie?
Zum testen sehe ich mir vor der Invertierei die BMP an: Weisser Hintergrund, schwarze Linie quer durch, mit schwarzem Text. Soweit also ok. Dass die Invertierungsroutine ok ist, denke ich, sieht man an dem anschließendem schwarzem Rechteck und den weissem Text. Aber alle Linien, oder Kreise u.ä. die ich zeichne, werden nicht invertiert.

Was läuft da falsch?

Vielen Dank für alle Hinweise/Tipps!
Gruß
Jazzman

himitsu 15. Jan 2010 19:17

Re: Bitmap invertieren
 
Zitat:

Zitat von Jazzman_Marburg
Dass die Invertierungsroutine ok ist, denke ich, ...

Sieht aber nicht so aus, dann was soll denn an dem hier gezeigten Code falsch sein?
Nix.
Also, wie sieht nun dein InvertRect aus?

Jazzman_Marburg 15. Jan 2010 19:23

Re: Bitmap invertieren
 
Zitat:

Zitat von himitsu
Sieht aber nicht so aus, dann was soll denn an dem hier gezeigten Code falsch sein?
Nix.
Also, wie sieht nun dein InvertRect aus?

Missverständnis?
InvertRect ist eine GDI-Routine:

Delphi-Quellcode:
OH:
InvertRect

The InvertRect function inverts a rectangle in a window by performing a logical NOT operation on the color values for each pixel in the rectangle's interior.

BOOL InvertRect(
  HDC hDC,          // handle to DC
  CONST RECT *lprc  // rectangle
);
Das ist mein InvertRect.

Gruß
Jazzman

Micha88 15. Jan 2010 19:26

Re: Bitmap invertieren
 
Also in JAVA gehe ich das Bild (Bitmap in dem Falle)
Zeile für Zeile durch und invertiere, jenachdem welche Farbe das ist.

himitsu 15. Jan 2010 20:27

Re: Bitmap invertieren
 
Prüf mal, ob BMP.Canvas.ClipRect überhaupt das gesamte Bild umfaßt.

SirThornberry 15. Jan 2010 22:16

Re: Bitmap invertieren
 
Kannst du uns mal den originalen Quellcode zeigen? Denn der aus dem ersten Beitrag ist so sehr zusammen gekürzt das man auch eine Glaskugel nehmen könnte um den Fehler zu finden :glaskugel:

Jazzman_Marburg 16. Jan 2010 14:37

Re: Bitmap invertieren
 
Entwarnung!

Ich hatte Tomaten auf den Augen -- das Invertieren klappt prima (mit InvertRect-GDI). Das Problem war (ich wage es kaum zu sagen :stupid: ): Das zu invertierende BMP hat Weiss als Transparenzfarbe. Da ich nun das invertierete BMP auf einem anderen BMP (teils schwarz) liegen habe, habe ich schlicht einfach nicht gesehen, dass korrekt invertiert worden war und alls was weiss werden sollte nun transparent ist und nun schlicht und einfach, das darunterliegende BMP zeigte.
Das was ich als weissen Text inerpretierte war auch nur der darunterliegende Text.
Das passiert nun mal, wenn man mit einigen BMPs herumjongliert.

Wenn es interessiert:
Ich verschiebe einen kleinen autonomen Roboter (BMP1) über eine Test-Strecke(BMP2). Der Roboter reagiert auf seine Abstandssensoren -- mit der obigen Geschichte prüfe ich nur, ob der Roboter nicht eine Wand durchfährt (auch wenn die Sensoren das verhindern sollen, passiert dies nun mal).

Also, vielen Dank für eure Hinweise und Kommentare -- aber manchmal steht man sich einfach selber im Weg und ein neuer Tag öffnet dann die Augen.

Gruße an Alle
Jazzman

Gehstock 16. Jan 2010 15:48

Re: Bitmap invertieren
 
http://www.efg2.com/Lab/Library/Delp...hics/Color.htm

Jazzman_Marburg 16. Jan 2010 19:21

Re: Bitmap invertieren
 
Zitat:

Zitat von Gehstock
http://www.efg2.com/Lab/Library/Delphi/Graphics/Color.htm

Ähm... worauf wolltest Du hinweisen?
Auf "InvertColor in Bitmap"? Genau so mache ich es ja.

(Wie gesagt, ich hatte Tomaten auf den Augen).

Gruß
Jazzman


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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