function InvertBitmap(MyBitmap: TBitmap): TBitmap;
var
i, j: Integer;
ByteArray: PByteArray;
begin
MyBitmap.PixelFormat := pf24Bit;
for j := 0 to MyBitmap.Height - 1 do
begin
ByteArray := MyBitmap.ScanLine[j];
for i := 0 to MyBitmap.Width * 3 - 1 do
begin
ByteArray[i] := 255 - ByteArray[i];
end;
end;
Result := MyBitmap;
end;
Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap := InvertBitmap(Image1.Picture.Bitmap);
end;
Просмотров: 6837
Надо бы отметить, что оно не работает с прозрачностью...
И для оптимизации было бы неплохо вынести "MyBitmap.Height-1" и "MyBitmap.Width*3-1" в отдельные переменные (до циклов)... |
2. Unnamed user
ByteArray := MyBitmap.ScanLine[y];
Y нигде не объявлен, там должен быть индекс [i]? Ответ: Там, вроде бы, должно быть j
|
Copyright © 2008 - 2018 Программирование на Delphi для начинающих и не только.
Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.