![]() |
Pen.Color wird ignoriert
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. |
AW: Pen.Color wird ignoriert
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
Delphi-Quellcode:
überhaupt etwas? Hier wird ja ein TPNGImage an ein TBitmap zugewiesen und Jenes kennt natürlich nur Eigenschaften von TBitmaps.
Img.Picture.Bitmap.Assign(PNG);
|
AW: Pen.Color wird ignoriert
Zitat:
|
AW: Pen.Color wird ignoriert
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.
|
AW: Pen.Color wird ignoriert
Hi,
irgendwie verstehe ich noch nicht so richtig, was bei dir wann funktionieren soll. An welcher Stelle in deinem Code soll
Delphi-Quellcode:
stehen, damit das setzen der Pen.Eigenschaften funktioniert? Bitte benutze doch [$DELPHI]Hier dein Code[$/DELPHI], um deinen Code darzustellen (ohne das $-Zeichen).
Img.Picture.LoadFromFile('Aloahe2.bmp')
Edit: Außerdem ist TPNGObject veraltet, TPngImage ist die neue Variante. |
AW: Pen.Color wird ignoriert
@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))='.PNG' then 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; |
AW: Pen.Color wird ignoriert
ein Fehler im Listing oben, in Zeile 5 im FormCreate muss es heißen:
Img.Picture.LoadFromFile('Aloahe2.BMP'); Pardon! |
AW: Pen.Color wird ignoriert
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.
|
AW: Pen.Color wird ignoriert
@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:
Vielen Dank an die Mitdenker :-D
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; |
AW: Pen.Color wird ignoriert
Wie wär's mit Lesen der Doku?
![]()
Delphi-Quellcode:
benutzen.
(Image.Picture.Graphic as TPNGImage).Canvas
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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