topBitmap Bild Laden und in einen normalen TCanvas einfügen?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

topBitmap Bild Laden und in einen normalen TCanvas einfügen?

Beitrag von pluto »

Hallo,
ich möchte gerne ein bild laden und das dann in ein Normales Tbitmap.canvas einfügen.

Ich bin verschinde beispiel von OpBitmap durch gegangen bin aber nicht hinter das Geheimnis gekommen :(

Könnt mir jemand ein kleines beispiel dazu machen ? Danke !
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

So ich habe es doch geschaft:

Code: Alles auswählen

Hintergrund:=TLazOPPicture.Create(nil);
  Hintergrund.LoadFromFile('/home/pluto/daten/eigene/lazarus/Drawball/sourcecode/display.png');
  bild:=TBitmap.Create;
  AssignOpBitmapToBitmap(Hintergrund.Bitmap,bild)
allerdings hat es auswirkung auf mein kleines spiel:
Wenn ich alles was mit optbitmap zu tuen hat raußnehme läuft es normal.
Wenn ich es wieder reinmache ist die cpu last bei 100% was sonst nicht der Fall !
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Wie meinst du "laden"? Mit OpBitmap oder mit LCL?
Und was meinst du mit Einfügen? Teilweise drüberpinseln?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:Wenn ich alles was mit optbitmap zu tuen hat raußnehme läuft es normal.
Wenn ich es wieder reinmache ist die cpu last bei 100% was sonst nicht der Fall !


Kommt halt drauf an wie man's macht. Wenn er es dauernd in ein TBitmap umwandeln muss, braucht's natürlich etwas CPU.
Lade die Bilder doch nur einmal in je ein TBitmap. Ist eh das Beste.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

so, habe den Fehler gefunden: und zwar habe ich "vergessen"
Destroy zu verwenden !
Ich glaube der Fehler ist jetzt weg. ist aber meine Vorgehensweise richtig ?

Code: Alles auswählen

procedure TGameDisplay.Draw(buffer:TBitmap);
begin
  buffer.Canvas.Draw(left,top,bild)
end;
 
constructor TGameDisplay.Create;
begin
  Hintergrund:=TLazOPPicture.Create(nil);
  Hintergrund.LoadFromFile('/home/pluto/daten/eigene/lazarus/Drawball/sourcecode/display.png');
  bild:=TBitmap.Create;
  AssignOpBitmapToBitmap(Hintergrund.Bitmap,bild)
end;

Das scheien mir das einzigte Weg zu sein !

Halbtraznparent währe auch nicht schlecht! Das kommt jetzt dran !

Edit:
doch nicht, der Fehler ist immer noch da.
Wenn ich die IDE schließe und wieder starte geht es prima.
ich brauche nur einige male zu starten und schon geht es nicht mehr so wie es sollte.

Aber solche Ähnlichen Fehler habe ich häufig !
Ich weiß einfach nicht warum ! ob das jetzt an OptBitmpa liegt weiß ich nicht. Aber dieser Fehler Tauchte erst auf, als ich es eingebunden habe !
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Das liegt kaum an OpBitmap.
Übrigens: nimm einfach ein TOPPicture statt ein TLazOPPicture..
Das letztere ist zur Verküpfung mit einem TImage gedacht. Das brauchst du ja hier nicht.

Und: sobald die Daten kopiert sind mit:
AssignOpBitmapToBitmap(Hintergrund.Bitmap,bild)
kannst du "Hintergrund" wieder freigeben. Es sei denn du brauchst es später nochmal.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Also TOPPicture wird nicht gefunden !

ich habe die unit opbitmapformats eingebunden, jetzt wird es gefunden !
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ist in opbitmapformats

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Bis jetzt finde ich es nicht schlecht, bis auf den mir bekannten Bug in der IDE oder wo auch immer.

Nur das mit den Halb Transparent ist etwas aufwendig für mein Geschmack,

Code: Alles auswählen

var
  r:Trect;
  Hintergrund:TOPPicture;
  ah:TCanvasOPBitmap;
begin
  Hintergrund:=TOPPicture.Create;
  Hintergrund.LoadFromFile('/home/pluto/daten/eigene/lazarus/Drawball/sourcecode/display.png');
 
  bild:=TBitmap.Create;
 
  ah:=TCanvasOPBitmap.Create;
  ah.AlphaBlend:=True;
  ah.Width:=100; ah.Height:=100;
  ah.Canvas.Brush.color:=clBlue;
  ah.canvas.FillRect(rect(0,0,100,100));
  ah.SetAlpha(100);
 
  Hintergrund.Bitmap.AlphaBlend := true;
  Hintergrund.Bitmap.Canvas.Draw(0, 0, ah);
  Hintergrund.Bitmap.AlphaBlend := false;
 
  AssignOpBitmapToBitmap(Hintergrund.Bitmap,bild);
 
  Hintergrund.free;
  ah.free;
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:Nur das mit den Halb Transparent ist etwas aufwendig für mein Geschmack,


Wie willst' es denn sonst machen?
Alphablending ist immer die Kombination zweier Bilder.
Der grösste Teil des Codes ist ja nur da um das zweite Bild zu createn und es mit einer Farbe zu füllen.

Antworten