All pastes #18937 Raw Edit

Miscellany

public text v1 · immutable
#18937 ·published 2005-07-31 15:32 UTC
rendered paste body
procedure bmp_swaprgbacomps(abitmap : tbitmap);
type
  TRGBA32b = array[0..3] of Byte;
  PRGBA32b = ^TRGBA32b;

  TRGB24b = array[0..2] of Byte;
  PRGB24b = ^TRGB24b;
var
  i, j, tempi : Integer;
  oldformat : TPixelFormat;
  l32 : PRGBA32b;
  l24 : PRGB24b;
begin
  oldformat := aBitmap.PixelFormat;
  if not (aBitmap.PixelFormat in [pf24bit, pf32bit]) then
    aBitmap.PixelFormat := pf24bit;

  case aBitmap.PixelFormat of
    pf24bit :
      for i:=0 to aBitmap.Height-1 do
        begin
          l24 := aBitmap.Scanline[i];
          for j:=0 to aBitmap.Width-1 do
            begin
              tempi := l24[0];
              l24[0] := l24[2];
              l24[2] := tempi;
              inc(l24);
            end;
        end;
    pf32bit :
      for i:=0 to aBitmap.Height-1 do
        begin
          l32 := aBitmap.Scanline[i];
          for j:=0 to aBitmap.Width-1 do
            begin
              tempi := l32[0];
              l32[0] := l32[2];
              l32[2] := tempi;
              inc(l32);
            end;
        end;
  end;

  if (aBitmap.PixelFormat <> oldformat) then
    aBitmap.PixelFormat := oldformat;
end;