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^ = 'IHDR' then
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;