Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Инверсия изображения


Автор: Xdron 15.3.2010, 21:20
Ребят, ни ктоне знает, как на TImage изображение инвертировать???

Автор: Xdron 15.3.2010, 21:42
Спасибо,уже не нужно....у самого получилось...))

function InvertBitmap(Bmp: TBitmap): TBitmap; 
var 
  x, y: integer; 
  ByteArray: PByteArray; 
begin 
  Bmp.PixelFormat := pf24Bit; 
  for y := 0 to Bmp.Height - 1 do 
  begin 
    ByteArray := Bmp.ScanLine[y]; 
    for x := 0 to Bmp.Width * 3 - 1 do 
    begin 
      ByteArray[x] := 255 - ByteArray[x]; 
    end; 
  end; 
  Result := Bmp; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  Image1.Picture.Bitmap := InvertBitmap(Image1.Picture.Bitmap); 
end; 
........... вот если кому надо

Автор: Snowy 17.3.2010, 11:06
Не, никому не надо.
Слишком долго и бессмысленно.
Код
var
  b1, b2: TBitmap;
begin
  b1 := TBitmap.Create;
  b1.Assign(Image1.Picture.Graphic);
  b2 := TBitmap.Create;
  b2.Width := b1.Width;
  b2.Height := b1.Height;
  BitBlt(b2.Canvas.Handle, 0, 0, b2.Width, b2.Height,
         b1.Canvas.Handle, 0, 0, SRCINVERT);
  Image1.Picture.Assign(b2);
end;
так в десятки-сотни раз быстрее.

Автор: AntonN 17.3.2010, 22:40
Snowy, а если потом будет использоваться 32-х битный битмап?

Автор: Dimonka2 18.3.2010, 14:38
Так будет чуть живее:

Код

function InvertBitmap(Bmp: TBitmap): TBitmap; 
var 
  x, y: integer; 
  P: PInteger; 
  PI: integer absolute P;
  I: integer;
begin 
  Bmp.PixelFormat := pf24Bit; 
  I := $FFFFFF;
  for y := 0 to Bmp.Height - 1 do 
  begin 
    P := Bmp.ScanLine[y]; 
    for x := 0 to Bmp.Width - 1 do 
    begin 
      P^ := P^ xor I; 
      inc(PI, 3);
    end; 
  end; 
  Result := Bmp; 
end; 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)