AGB  ·  Datenschutz  ·  Impressum  







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

Pen.Color wird ignoriert

Ein Thema von palmakunkel · begonnen am 12. Nov 2024 · letzter Beitrag vom 15. Nov 2024
Antwort Antwort
palmakunkel

Registriert seit: 3. Dez 2005
Ort: Coswig
18 Beiträge
 
Delphi 11 Alexandria
 
#1

Pen.Color wird ignoriert

  Alt 12. Nov 2024, 15:00
Liebe Delphi-Gemeinde, ich brauche Hilfe:
bei folgendem Code wird die Pen.Color ignoriert. Es wird immer weiß gezeichnet, ganz gleich was ich setze. Wenn ich in Img direkt ein Bitmap lade klappt es.

type
TForm1 = class(TForm)
...
Img: TImage;
...

procedure ConvertToBMP(const FileName: string; var Img: TImage);
var PNG: TPNGObject;
ts: string;
begin
if UpperCase(TPath.GetExtension(FileName))='.PNG' then
begin
PNG := TPNGObject.Create;
try
PNG.LoadFromFile(FileName);
Img.Picture.Bitmap.Assign(PNG);
finally
PNG.Free;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Img.Canvas.Brush.Color:=clWhite;
Img.Canvas.FloodFill(1,1,clBlack,fsSurface);

ConvertToBMP('Aloahe2.png', Img);

Img.Canvas.Pen.Color:=clBlack;
Img.Canvas.Pen.Mode:=pmCopy;
Img.Canvas.Pen.Style:=psSolid;
end;

Wäre sehr dankbar für einen Tipp.
Gunter Dickopf
sie passten gut zueinander - geometrisch gesehen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 15:04
Wo sollte das denn ignoriert werden?

Es wird von DIR nirmals benutzt.
* Farbe wird zugewiesen
* und anschließend wird niemals etwas damit gemalt


Und am Anfang der Brush und FlodFill sind auch "nutzlos", da anschließend das komplette Bild durch das PNG ersetzt (versucht) wird.
Wobei, macht das Img.Picture.Bitmap.Assign(PNG); überhaupt etwas? Hier wird ja ein TPNGImage an ein TBitmap zugewiesen und Jenes kennt natürlich nur Eigenschaften von TBitmaps.
$2B or not $2B

Geändert von himitsu (12. Nov 2024 um 15:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 15:20
Hier wird ja ein TPNGImage an ein TBitmap zugewiesen und Jenes kennt natürlich nur Eigenschaften von TBitmaps.
Das funktioniert schon wie es soll. TBitmap.Assign kennt zwar kein TPngImage, aber dann leitet es das Assign eben an das inherited weiter. Im TPersistent wird es dann an das AssignTo delegiert, das in TPngImage dann die Konvertierung in TBitmap durchführt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
palmakunkel

Registriert seit: 3. Dez 2005
Ort: Coswig
18 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 15:50
Danke, @himitsu: es wird schon verwendet, das habe ich aber nicht in das Code-Schnipsel gepackt. Unklar ist mir, warum Pen.Color korrekt verwendet wird, wenn ich Img.Picture.LoadFromFile('Aloahe2.bmp') lade, aber nicht, wenn vorher die Konvertierung mit ConvertToBMP('Aloahe2.PNG', Img) erfolgt.
Gunter Dickopf
sie passten gut zueinander - geometrisch gesehen
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
24 Beiträge
 
Delphi 12 Athens
 
#5

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 16:24
Hi,
irgendwie verstehe ich noch nicht so richtig, was bei dir wann funktionieren soll. An welcher Stelle in deinem Code soll  Img.Picture.LoadFromFile('Aloahe2.bmp') stehen, damit das setzen der Pen.Eigenschaften funktioniert? Bitte benutze doch [$DELPHI]Hier dein Code[$/DELPHI], um deinen Code darzustellen (ohne das $-Zeichen).

Edit: Außerdem ist TPNGObject veraltet, TPngImage ist die neue Variante.
  Mit Zitat antworten Zitat
palmakunkel

Registriert seit: 3. Dez 2005
Ort: Coswig
18 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 16:38
@itsChris: TPNGObject habe ich rausgeschmissen,
@himitsu: ebenso FloodFill,
hier nochmal das Wichtigste aus dem Code:

Delphi-Quellcode:
type
   TForm1 = class(TForm)
     ...
     Img: TImage;
     ...
   end;
   
procedure ConvertToBMP(const FileName: string; var Img: TImage);
var PNG: TPNGImage;
begin
  if UpperCase(TPath.GetExtension(FileName))='.PNGthen
  begin
    PNG := TPNGImage.Create;
    try
      PNG.LoadFromFile(FileName); // Load the PNG image
      Img.Picture.Bitmap.Assign(PNG);
    finally
      PNG.Free;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // bei folgenden Variante wird Pen.Color ignoriert
  ConvertToBMP('Aloahe2.png', Img);
  
  // bei dieser Variante klappt Pen.Color
  Img.Picture.LoadFromFile('Aloahe2.png');
  // das mache ich natürlich nicht hintereinander,
  // es steht nur zum Deutlichmachen hier
  
  Img.Canvas.Pen.Color:=clBlack;
  Img.Canvas.Pen.Mode:=pmCopy;
  Img.Canvas.Pen.Style:=psSolid;
end;

procedure TForm1.ScrMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DrawState:=true;
  if DrawStyle= dsPen then Img.Canvas.MoveTo(X,Y);
end;    

procedure TForm1.ScrMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if Drawstate then
   if DrawStyle=dsPen then Img.Canvas.LineTo(X,Y);
end;
Gunter Dickopf
sie passten gut zueinander - geometrisch gesehen
  Mit Zitat antworten Zitat
palmakunkel

Registriert seit: 3. Dez 2005
Ort: Coswig
18 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 16:58
ein Fehler im Listing oben, in Zeile 5 im FormCreate muss es heißen:

Img.Picture.LoadFromFile('Aloahe2.BMP');

Pardon!
Gunter Dickopf
sie passten gut zueinander - geometrisch gesehen
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#8

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 23:47
Man sollte sich nie darauf verlassen, dass ein Canvas gesetzte Properties über das Ende einer Methode hinaus behält (zumindest bei VCL-Anwendungen). Setz die Properties direkt vor dem LineTo-Statement, dann klappt es auch zuverlässig.
Peter Below
  Mit Zitat antworten Zitat
palmakunkel

Registriert seit: 3. Dez 2005
Ort: Coswig
18 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Pen.Color wird ignoriert

  Alt 14. Nov 2024, 10:29
@peterbelow: das ist ein guter Hinweis, danke, mache ich zur Sicherheit jetzt. Die Lösung des Problems ist aber gewesen, Img.Picture.Bitmap.Alphaformat:=afIgnored zu setzen. Die Procedure ConvertToBMP lautet jetzt so:

Delphi-Quellcode:
procedure ConvertToBMP(const FileName: string; var Img: TImage);
var PNG: TPNGImage;
    BMP: TBitmap;
begin
  BMP:=TBitmap.Create;
  PNG := TPNGImage.Create;
  try
    PNG.LoadFromFile(FileName);
    BMP.Assign(PNG);
    Img.Picture.Assign(BMP);
    Img.Picture.Bitmap.Alphaformat:=afIgnored;
  finally
    PNG.Free;
    BMP.Free;
  end;
end;
Vielen Dank an die Mitdenker
Gunter Dickopf
sie passten gut zueinander - geometrisch gesehen
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Pen.Color wird ignoriert

  Alt 15. Nov 2024, 11:22
Wie wär's mit Lesen der Doku? Delphi-Referenz durchsuchenTImage.Canvas soll, wie da auch ausdrücklich steht, nur genutzt werden, wenn TImage eine Bitmap enthält. (Falls TPicture nicht initialisiert ist, wird eine TBitmap erstellt.) Ist eine PNG drin, würde man (Image.Picture.Graphic as TPNGImage).Canvas benutzen.

TImage ist dafür gedacht, dass du Bitmaps, Metafiles or Icons drauf anzeigst. Sieht man gut an den Eigenschaften von TPicture. Alles andere geht, aber schlecht. Alternativen gibt es nicht wirklich, muss man also mit leben.
Janni
2005 PE, 2009 PA, XE2 PA
  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 16:19 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