opBitmap und tga grafiken ?

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

opBitmap und tga grafiken ?

Beitrag von pluto »

Hallo,
ich habe hier ein tga Grafik die wird falsch da gestellt
und ich weiß einfach nicht warum zum laden nutze ich folgenden code:

Code: Alles auswählen

procedure LoadFileToBMP(const aFileName: String; var aBuffer: TBitMap);
var
  op:TOPPicture;
begin
  op:=TOpPicture.Create;
  op.LoadFromFile(aFileName);
  AssignOpBitmapToBitmap(op.Bitmap,aBuffer);
  op.free;
end;
im anhang sind zwei Grafiken

Code: Alles auswählen

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  tmp:TBitMap;
begin
  tmp:=Tbitmap.create;
  LoadFileToBMP('/home/pluto/daten/eigene/lazarus/d2Engine/eXtreme_Towerdefence/bin/image/ApeD.png',tmp);
  Paintbox1.Canvas.Draw(0,0,tmp);
end;
So lädt OpBitmap die Grafik

PS:
ich hätte dir auch ein PM geschrieben, doch leider kann man da keine anhänge mit versenden :(

edit1: ich habe die Grafik auch schon mit einem anderen Programm in png umgewaldet aber
auch hier der gleiche Fehler

edit2: ich habe die Grafiken als bmp gespeichert eine davon, und das macht opBitmap richtig.... kann es sein da TGA und PNG Tranzparente Daten enthalten das er damit Probleme hat ?
Dateianhänge
So sollst nicht aussehen
So sollst nicht aussehen
so sollst aussehen
so sollst aussehen
ApeD.png (6.8 KiB) 978 mal betrachtet
MFG
Michael Springwald

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

Beitrag von pluto »

Und hat sich jemand die Grafik mal angesehen und kann den Fehler Erklären ?
MFG
Michael Springwald

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

Beitrag von theo »

Das ApeD.png hat einen Alphakanal.

Probier mal das, dann sieht das Bild "normal" aus:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var op:TOPPicture;
ob:TCanvasOpBitmap;
begin
  op:=TOpPicture.Create;
  op.LoadFromFile('/home/theo/Documents/ApeD.png');
  ob:=TCanvasOpBitmap.Create;
  ob.Width:=op.Bitmap.Width;
  ob.Height:=op.Bitmap.Height;
  ob.Canvas.Brush.Color:=clwhite;
  ob.Canvas.FillRect(Rect(0,0,ob.Width,ob.Height));
  op.Bitmap.AlphaBlend:=true;
  ob.Canvas.Draw(0,0,op.Bitmap);
  AssignOpBitmapToBitmap(ob,Image1.Picture.Bitmap);
  ob.free;
  op.free;
end;
Das ist übrigens ein Problem mit den Interfaces.
Qt hat kein Problem damit und kann es auch so anzeigen:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var op:TOPPicture;
begin
  op:=TOpPicture.Create;
  op.LoadFromFile('/home/theo/Documents/ApeD.png');
  AssignOpBitmapToBitmap(op.Bitmap,Image1.Picture.Bitmap);
  op.free;
end;

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

Beitrag von pluto »

ach so wie ich das jetzt sehe brauche ich blos: op.Bitmap.AlphaBlend:=true; zu machen.
...
Vielen Dank ! Werde ich gleich mal ausprobieren.
MFG
Michael Springwald

Antworten