AGB  ·  Datenschutz  ·  Impressum  







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

PNG in Bitmap-Layer laden

Ein Thema von banaguitar · begonnen am 11. Apr 2024 · letzter Beitrag vom 16. Apr 2024
Antwort Antwort
banaguitar

Registriert seit: 19. Feb 2024
15 Beiträge
 
#1

PNG in Bitmap-Layer laden

  Alt 11. Apr 2024, 18:23
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:
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;
Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: PNG in Bitmap-Layer laden

  Alt 12. Apr 2024, 07:08
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?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
banaguitar

Registriert seit: 19. Feb 2024
15 Beiträge
 
#3

AW: PNG in Bitmap-Layer laden

  Alt 12. Apr 2024, 11:45
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.
Angehängte Dateien
Dateityp: zip Example Layer.zip (1,37 MB, 6x aufgerufen)

Geändert von banaguitar (12. Apr 2024 um 18:16 Uhr)
  Mit Zitat antworten Zitat
banaguitar

Registriert seit: 19. Feb 2024
15 Beiträge
 
#4

AW: PNG in Bitmap-Layer laden

  Alt 12. Apr 2024, 18:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: PNG in Bitmap-Layer laden

  Alt 12. Apr 2024, 21:07
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);
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
732 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: PNG in Bitmap-Layer laden

  Alt 16. Apr 2024, 16:30
Ich würde im FormResize die Grösse anpassen.

Delphi-Quellcode:
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.
Wenn du mehrere Layers verwendest:
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.)
Michael Gasser
  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 22:11 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