topBitmap Bild Laden und in einen normalen TCanvas einfügen?
-
- 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?
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 !
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
Michael Springwald
-
- 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)
So ich habe es doch geschaft:
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 !
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)
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
Michael Springwald
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.
-
- 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)
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 ?
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 !
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
Michael Springwald
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.
Ü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.
-
- 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)
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,
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
Michael Springwald