AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap invertieren

Ein Thema von Jazzman_Marburg · begonnen am 15. Jan 2010 · letzter Beitrag vom 16. Jan 2010
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

Bitmap invertieren

  Alt 15. Jan 2010, 20:06
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Bitmap invertieren

  Alt 15. Jan 2010, 20:17
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?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

Re: Bitmap invertieren

  Alt 15. Jan 2010, 20:23
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Micha88
(Gast)

n/a Beiträge
 
#4

Re: Bitmap invertieren

  Alt 15. Jan 2010, 20:26
Also in JAVA gehe ich das Bild (Bitmap in dem Falle)
Zeile für Zeile durch und invertiere, jenachdem welche Farbe das ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Bitmap invertieren

  Alt 15. Jan 2010, 21:27
Prüf mal, ob BMP.Canvas.ClipRect überhaupt das gesamte Bild umfaßt.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Bitmap invertieren

  Alt 15. Jan 2010, 23:16
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

Re: Bitmap invertieren

  Alt 16. Jan 2010, 15:37
Entwarnung!

Ich hatte Tomaten auf den Augen -- das Invertieren klappt prima (mit InvertRect-GDI). Das Problem war (ich wage es kaum zu sagen ): 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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Bitmap invertieren

  Alt 16. Jan 2010, 16:48
http://www.efg2.com/Lab/Library/Delp...hics/Color.htm
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

Re: Bitmap invertieren

  Alt 16. Jan 2010, 20:21
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:39 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