![]() |
PNG in Bitmap-Layer laden
Hallo,
ich möchte ein PNG in einen Bitmap-Layer laden und habe das Problem, dass das png, welches ich als klickbaren Button nutzen möchte, nicht die korrekte Größe hat, sondern viel zu klein dargestellt wird. Alles andere passt. Was stimmt an meinem Code nicht?
Code:
Vielen Dank!
ImgView.Layers.Clear;
ImgView.scalemode := smResize; ImgView.Bitmap.LoadFromFile('background.jpg'); BL := TBitmapLayer.Create(ImgView.Layers); LoadBitmap32FromPNG(BL.bitmap,'button.png'); BL.Bitmap.DrawMode := dmtransparent; BL.Scaled := true; BL.OnClick := OnClickButton; |
AW: PNG in Bitmap-Layer laden
Kann es sein, dass du eine andere Skalierung als 100% in Windows eingestellt hast?
Kannst du daraus vielleicht ein kleines Beispielprojekt erstellen, damit das Problem nachvollziehbar ist? |
AW: PNG in Bitmap-Layer laden
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, ja, klar, mache ich gerne. Das png sieht echt auch nicht gut aus an den Kanten. Habe auch mal auf dmblend gestellt, sieht genauso hässlich aus. Skalierung ist bei Windows auf 100% eingestellt.
|
AW: PNG in Bitmap-Layer laden
Ich habe ein kleines Beispielprojekt hinzugefügt. Die Hintergrundbilder varrieren, aber das ist ja erstmal egal. SetSize ändert in diesem Fall nichts, daher habe ich weggelassen.
|
AW: PNG in Bitmap-Layer laden
Ich habe Graphics32 noch nie benutzt, deshalb hatte ich nach einem Beispielprojekt gefragt. Ich musste auch kurz schauen, aber dann bin ich über Location gestolpert:
Delphi-Quellcode:
...
BL.Location := TRectF.Create(10, 10, 500, 500); |
AW: PNG in Bitmap-Layer laden
Ich würde im FormResize die Grösse anpassen.
Delphi-Quellcode:
Wenn du mehrere Layers verwendest:
var BL:TBitmapLayer;
origwidth, origheight : integer; origbitmap : TBitMap32; ... procedure TForm1.FormCreate(Sender: TObject); ... begin origwidth := clientwidth; origheight := clientheight; ... // ich verwende noch eine alte Version von Graphics32 ohne direkte PNG Unterstützung: png := TPNGImage.Create; png.LoadFromFile( ExtractFilePath(ParamStr(0)) + 'images\next.png' ); origbitmap.Assign(png); BL.bitmap.assign(origbitmap); ... procedure TForm1.FormResize(Sender: TObject); var Scale: Single; begin if (ClientWidth > 0) and (ClientHeight > 0) then begin Scale := Min(ClientWidth / origwidth, ClientHeight / origheight ); bl.Bitmap.SetSize(Round(Origbitmap.Width* Scale), Round(Origbitmap.Height* Scale)); bl.Bitmap.Draw(bl.Bitmap.BoundsRect, OrigBitMap.BoundsRect, OrigBitMap); end; end; initialization origbitmap := TBitMap32.Create; finalization origbitmap.Free; end. TImage32 -> TLayerCollection TIMage32 kennt die Eigenschaft Layers. Du kannst Bilder deiner Buttons, Spielkarten, Raumschiffe etc. beim Programmstart laden. Dann hast du via die Layers Zugriff auf die Bitmaps und kannst im FormResize auf einfache Weise alle Bitmaps anpassen. (Wenn du die Layerfunktionalität nicht benötigst: TBitmap32List.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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