Einzelnen Beitrag anzeigen

Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#25

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

  Alt 16. Aug 2016, 16:26
Zitat:
Da wird's schon wieder lustig, weil ich habe keine Ahnung, wie das gehen soll. TglBitmap2d bietet meines Wissens keine ScanLine an, weil es ja kein TBitmap oder so in dem Sinne ist.
Ich denke schon..

function TglBitmap2D.GetScanline(Index: Integer): Pointer; gruss
Ja, es gibt sogar in einem meiner vorherigen Posts einen speziellen Link mit einer überladenen Methode für GR32 dazu. Siehe: https://delphigl.com/forum/viewtopic...hics32#p100074

CTOP!

Delphi-Quellcode:
     
    uses [...] {$IFDEF GLB_DELPHI}           Dialogs, Graphics, Types, GR32, {$ENDIF} [...]
     
    function TglBitmapData.AssignFromBitmap(const aBitmap: TBitmap32): Boolean;
    var
      pSource: PColor32Array;
      pData, pTempData: PByte;
      Row, RowSize, TempWidth, TempHeight: Integer;
      IntFormat: TglBitmapFormat;
    begin
      result := false;
     
      if (Assigned(aBitmap)) then
      begin
        IntFormat := tfBGRA8ub4;
        TempWidth := aBitmap.Width;
        TempHeight := aBitmap.Height;
        RowSize := TFormatDescriptor.Get(IntFormat).GetSize(TempWidth, 1);
        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;
          SetData(pData, IntFormat, TempWidth, TempHeight);
          result := true;
        except
          if Assigned(pData) then
            FreeMem(pData);
          raise;
        end;
      end;
    end;

@berens: <Ja was passiert denn, wenn es eine .tif oder .jpg-Datei ist. Geht dann LoadPNG trotzdem?>
Nomen est omen?

Dafür hat man dann andere (in meinem Falle) <native> Importroutinen, oder nimmt halt das TWicImage. Ich bin ja davon ausgegangen, dass du korrekte Skalierung benötigst, da beim
Bitmap-Resizen große Verluste entstehen. Deswegen bevorzuge ich TBitmap32...

> Bild auf GlBitmap via Scanline übertragen.
<Da wird's schon wieder lustig, weil ich habe keine Ahnung, wie das gehen soll. TglBitmap2d bietet meines Wissens keine ScanLine an, weil es ja kein TBitmap oder so in dem Sinne ist>

Eine Bitmap hat nicht unbedingt was mit einem Bild zu tun - eher eine zweidimensionale Speichermöglichkeit. Eine TBitmap beherbergt ja auch nur ein zweidimensionales Bytearray für die Pixelinfo plus einen Header. Das Bildformat im Header bestimmt dann, wieviele Bytes pro Pixel verwendet werden. In unserem Falle bei Gr32 oder glBitmap intern immer 32 Bit, deswegen sind die Scanlines auch schön nett kompatibel Die greift übrigens dann direkt auf den Lowlevel Bildbuffer zu und ist entsprechend schnell.

Und zu den Texturen und deren Position: Dazu musst du dann ggf auch mal UV Mapping generell verstehen. Richard hat da ein paar nette Tutorials für Modo... https://vimeo.com/ondemand/uvmapping/168397312
Peter

Geändert von bytecook (16. Aug 2016 um 16:43 Uhr)
  Mit Zitat antworten Zitat