Einzelnen Beitrag anzeigen

Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Bit-Tiefe in PNG ermitteln

  Alt 26. Mär 2020, 22:15
Hab eine Schleife in Uralt-Code von 2011 gefunden. Hab das jetzt etwas angepasst, aber nicht getestet.
Delphi-Quellcode:
type
  TChunkname = array[0..3] of AnsiChar;
  
function SwapEndianness(i: Integer): Integer;
begin
  Result := ((i and $FF000000) shr 24) or
            ((i and $00FF0000) shr 8) or
            ((i and $0000FF00) shl 8) or
            ((i and $000000FF) shl 24);
end;

var
  i: Integer;
  Nutzdaten: Pinteger;
  bs: TBytesStream;
  m: TBytes;
  Chunkname: ^TChunkname;
  Farbtiefe: PByte;
begin
  bs := TBytesStream.Create();
  bs.LoadFromFile('bla.png');
  m := bs.Memory;
  try
    i := 8; // skip header
    while i < bs.Size - 8 do
    begin
      Nutzdaten := @m[i];
      Chunkname := @m[i+4];
      
      if Chunkname^ = 'IHDRthen
      begin
        Farbtiefe := @m[i+8+8];
        Break;
      end;
      
      inc(i, SwapEndianness(Nutzdaten^)+12);
    end;
  finally
    m := 0;
    bs.Free();
  end;
  // Tu was mit Farbtiefe^, in deinem Fall mit 3 vergleichen
end;
Janni
2005 PE, 2009 PA, XE2 PA

Geändert von Redeemer (26. Mär 2020 um 22:17 Uhr) Grund: Farbtiefe ist 16 hinter der Nutzdatengröße (i zeigt auf die Nutzgröße)
  Mit Zitat antworten Zitat