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
itsChris

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

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 15: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
 
#2

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 15: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
 
#3

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 15: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
727 Beiträge
 
Delphi 12 Athens
 
#4

AW: Pen.Color wird ignoriert

  Alt 12. Nov 2024, 22: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
 
#5

AW: Pen.Color wird ignoriert

  Alt 14. Nov 2024, 09: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.140 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Pen.Color wird ignoriert

  Alt 15. Nov 2024, 10: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 00:44 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