Zu "TFormatDescriptor" finde ich leider auch über Google nichts, bzw. dieser Thread hier ist schon auf Platz 3 der Suchergebnisse. Deshalb funktioniert die verlinkte Prozedur nicht. Was genau verwendest du da?
Ausserdem musste ich einiges anpassen:
Delphi-Quellcode:
function TglBitmap.AssignFromBitmap(const aBitmap: TBitmap32): Boolean;
var
pSource: PColor32Array;
pData, pTempData: PByte;
Row, RowSize, TempWidth, TempHeight: Integer;
IntFormat: TglBitmapInternalFormat;
begin
result := false;
if (Assigned(aBitmap)) then
begin
IntFormat := ifBGRA8; // hier
TempWidth := aBitmap.Width;
TempHeight := aBitmap.Height;
RowSize := trunc(FormatGetSize(IntFormat) * TempWidth); // hier
GetMem(pData, TempHeight * RowSize);
try
pTempData := pData;
for Row := 0 to TempHeight -1 do
begin
pSource := aBitmap.Scanline[Row];
if (Assigned(pSource)) then
begin
Move(pSource^, pTempData^, RowSize);
Inc(pTempData, RowSize);
end;
end;
SetDataPointer(pData, IntFormat, TempWidth, TempHeight); //hier
result := true;
except
if Assigned(pData) then
FreeMem(pData);
raise;
end;
end;
end;
Das Ganze wird soweit korrekt dargestellt, die Frage ist halt, ob Alles rechnerisch bzw. Inhaltlich richtig ist. Leider muss man diese Prozedur direkt in die glBitmap-
Unit einbinden, da einige interne Prozeduren verwendet werden, die von außerhalb der
Unit nicht erreichbar sind (naja, die kann man ja kopieren oder über Deklarationen nach Außen verfügbar machen.
Hiermit kann ich nun die Graphik tatsächlich proportional verkleinert auf die Textur zeichnen, aktuell noch unschön mit tmpImage:
Delphi-Quellcode:
bmp32 := TBitmap32.Create;
bmp32.Width := TexturWidth;
bmp32.Height := TexturHeight;
bmp32.Canvas.StretchDraw(Rect(0, 0, ImageWidth, ImageHeight), tmpImage.Picture.Graphic);
AssignFromBitmap(bmp32);
GenTexture(True);
Bitte mal gegenlesen ob das insgesamt passt. Ich versuche dann später noch das "SmoothResize" aus den GR32-Units zu verwenden und dann hier noch zu posten.
-- Aktuell sieht es so gut aus! Sowohl .bmp und .png werden korrekt dargestellt, die anteilige Verwendung der Texturen scheint auch zu klappen, dass muss ich nochmal im Detail morgen testen. --
Übrigens hat der TWICImage-Loader lustigerweise bei dem Test mit einer 18'000 x 13'648 Graphik mit
Exception versagt. TImage/TPicture hat jedoch problemlos geklappt. (Ich glaube Euch, dass die GR32-Loader besser/stabiler sind/sein können, aber wenn's so funktioniert... Warum nicht?)
Nochmal großes Dank an Alle!
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit