Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#27

AW: Bilder [mit/ohne Transparenz] in universelles Format bringen

  Alt 16. Aug 2016, 19:37
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
  Mit Zitat antworten Zitat