Einzelnen Beitrag anzeigen

Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#26

Re: Ein Bild mit einer Farbe multiplizieren?

  Alt 26. Jan 2008, 18:42
Zitat von Muetze1:
Du beachtest nicht das padding zwischen den einzelnen ScanLines! Jede ScanLine ist 32 Bit aligned und da du mit 24 bpp arbeitest ist nur jeder 4. Pixel 32 bit aligned und somit hast du eine große Chance auf falsche Pixeldaten zu zu greifen.
Hierbei wird dies aber nicht auffallen, da mit jedem Byte das gleich gemacht wird. Aus diesem Grund könntest du auch gleich mit einem PByte arbeiten.
Oh stimmt, da ich sonst immer mit 32bit arbeite hab ich jetzt im moment garnicht daran gedacht...

Hier die korrigierte Version:
Delphi-Quellcode:
procedure Multi(src: TBitmap; r, g, b, Intensiv: Byte);
var
  P: PRGBTriple;
  x, y: integer;
begin
  if src.PixelFormat<>pf24bit then
    src.PixelFormat:=pf24bit;

  for y:=0 to src.Height-1 do begin
    P:=src.scanline[y];
    for x:=0 to src.Width-1 do begin
      P.rgbtBlue := (P.rgbtBlue shl 8 * not Intensiv + P.rgbtBlue * Succ(b) * Intensiv) shr 16;
      P.rgbtGreen := (P.rgbtGreen shl 8 * not Intensiv + P.rgbtGreen * Succ(g) * Intensiv) shr 16;
      P.rgbtRed := (P.rgbtRed shl 8 * not Intensiv + P.rgbtRed * Succ(r) * Intensiv) shr 16;
      Inc(P);
    end;
  end;
end;
  Mit Zitat antworten Zitat