Was muss ich an folgendem Code ändern, damit es mit einem png-Bild funktioniert?
Code: Alles auswählen
uses Graphics
...
Bitmap1:=TBitmap.Create;
Bitmap1.LoadFromFile(Verzeichnis+'Bild.bmp');
Form1.Canvas.Draw(0, 0, Bitmap1);
Code: Alles auswählen
uses Graphics
...
Bitmap1:=TBitmap.Create;
Bitmap1.LoadFromFile(Verzeichnis+'Bild.bmp');
Form1.Canvas.Draw(0, 0, Bitmap1);
Code: Alles auswählen
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
Bild: TPortableNetworkGraphic;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Bild:=TPortableNetworkGraphic.Create;
Bild.LoadFromFile('C:\lazarus\images\splash_source\paw.png');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Bild.Free;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(0, 0, Bild); // Nicht den Formularnamen verwenden, sonst funktioniert das Programm nur, wenn die Instanz von TForm1 Form1 heißt!
end;
Code: Alles auswählen
Bild: TPicture;
,,,
Bild := TPicture.Create;
...
Canvas.Draw(0, 0, Bild.Bitmap);
Da png einen Alphakanal unterstützt, das 4.Byte von TColor aber immer mit 0 an den Canvas übergeben wird, zeichnest du also transparent. Dazu gab es vor kurzem eine Diskussion: http://www.lazarusforum.de/viewtopic.php?f=55&t=10151 - letzter Beitrag. Hier wird gezeigt, dass man mit Hilfe eines lazintfImage durchaus in einem png-Bild malen kann. Mit einem lazcanvas kann man sogar die üblichen Canvas-Routinen verwenden (hier und da etwas eingeschränkt):400kmh hat geschrieben:Kann es sein, dass es Probleme dabei gibt, mit Canvas etwas auf eine PortableNetworkGraphic zu zeichnen (anders als auf Bitmaps kann ich nur in grau zeichnen), und dass man auf TPictures garnichts mit Canvas zeichnen kann?
Code: Alles auswählen
procedure TForm1.Button8Click(Sender: TObject);
var
png: TPortableNetworkGraphic;
lazintfimg: TLazIntfImage;
lazcanvas: TLazCanvas;
begin
png := TPortableNetworkGraphic.Create;
try
png.LoadFromFile('border-color.png'); // eines der fugue-icons (http://p.yusukekamiyamane.com/icons/preview/fugue.png)
lazintfimg := png.CreateIntfImage;
try
lazcanvas := TLazCanvas.Create(lazintfimg);
try
lazcanvas.Brush.FPColor := colBlue;
lazcanvas.Brush.Style := bsSolid;
lazcanvas.FillRect(0, lazintfimg.Height-3, lazintfimg.Width, lazintfimg.Height-1);
png.LoadFromIntfImage(lazintfimg);
finally
lazcanvas.Free;
end;
finally
lazintfimg.Free;
end;
//png.saveToFile('d:\test.png');
Image1.Picture.Png.Assign(png);
finally
png.Free;
end;
end;
Aber eine Funktion TColorToFPColor, und umgekehrt FPColorToTColor, gibt es (in graphics).400kmh hat geschrieben:Mit LazCanvas komme ich nicht wirklich klar. Das benutzt z. B. FPColor statt Color, aber eine Funktion wie "RGBToFPColor" finde ich nicht.