[gelöst] Eine Grafik in eine andere einfügen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1650
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Eine Grafik in eine andere einfügen

Beitrag von fliegermichl »

wennerer hat geschrieben: Mi 5. Feb 2025, 18:01 Hallo Michael,
ich denke das Problem kommt daher das der Speedbutton und das Glyph verschiedene Größen besitzen. Mein untenstehender Code funktioniert bei mir jedenfalls. Ob die Transparenz bei manchen Bitmaps doch nötig wird kann ich nicht einschätzen.
Hallo Bernd,

Bitte entschuldige. Ich hab Deinen Code zunächst gar nicht ausprobiert.
Er macht genau das, was ich erreichen wollte.

Vielen lieben Dank.

Gruß
Michael

Edit: Doch nicht so ganz. Nachher wird der Speedbutton nicht mehr hervorgehoben dargestellt, wenn man mit der Maus darüber fährt.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1650
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [doch noch nicht ganz gelöst] Eine Grafik in eine andere einfügen

Beitrag von fliegermichl »

Also jetzt funktioniert es so, wie es soll.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var bmp : TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.Width := sb1.Glyph.Width;
  bmp.Height := sb1.Glyph.Height;
  bmp.Canvas.Pen.Color := sb1.glyph.Canvas.Pixels[0, 0];
  bmp.Canvas.Rectangle(0, 0, bmp.Width, bmp.Height);
  bmp.TransparentColor := bmp.Canvas.Pen.Color;
  bmp.Canvas.Draw(0, 0, sb1.Glyph);
  bmp.Canvas.Draw(sb1.Glyph.width-sb2.glyph.width, 0, sb2.Glyph);
  sb1.Glyph.Assign(bmp);
  bmp.Free;
end;
Ohne diese eigentlich unnötigen Zwischenschritte nach Zuweisung an bmp.Height und bmp.Canvas.Draw funktioniert es nicht.
Das riecht mir doch sehr nach einem Fehler.

nachher_richtig.png
nachher_richtig.png (87.48 KiB) 2068 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [doch noch nicht ganz gelöst] Eine Grafik in eine andere einfügen

Beitrag von af0815 »

fliegermichl hat geschrieben: Do 6. Feb 2025, 13:26 Ohne diese eigentlich unnötigen Zwischenschritte nach Zuweisung an bmp.Height und bmp.Canvas.Draw funktioniert es nicht.
Das riecht mir doch sehr nach einem Fehler.
Finde ich nicht so. Schaut mir danach aus, als müsste man das Bitmap Objekt richtig initialisieren, bzw. parameterisieren. Weil das BitmapObjet nach dem initialisieren für nichts Voreinstellungen hat. Die eigentliche Bitmap liegt ja im Speicher und erst mit den Parametern kann man die richtig interpretieren und benutzen. Greift man direkt zu sog gibt es manchmal Überraschungen. Sieh auch viewtopic.php?f=25&t=13553&hilit=V4L2&start=30
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1650
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [gelöst] Eine Grafik in eine andere einfügen

Beitrag von fliegermichl »

Naja, wenn es heisst, TCanvas.Draw zeichnet die angegebene Sourcegrafik an die angegebene Position und tut das nicht, dann ist das für mich ein Fehler.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1650
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [gelöst] Eine Grafik in eine andere einfügen

Beitrag von fliegermichl »

In dem Beitrag hier, wurde dieses Problem mittels TLazIntFImage und FPIageCanvas gelöst.
Damit funktioniert es out of the Box direkt.

Ist ein wenig undurchsichtig mit den ganzen Grafikklassen. TBitmap, TLazIntFImage, TFPCustomImage.

Antworten