Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Изображения, рисование



Вернуться к списку функций
 Зеркальное отражение изображения

 Прислал: Fenik (Новоуральск) ( 16 июля 2002 г. )
©  Автор: Федоровских Николай
 Зависимости:
Windows, Graphics

 Ограничения:
Проверено в D5, Win Me

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Зеркальное отражение изображения

Зависимости: Windows, Graphics
Автор:       Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright:   Автор: Федоровских Николай
Дата:        16 июля 2002 г.
***************************************************************** }

procedure FlipBitmap(Bitmap: TBitmap; FlipHor: Boolean);
{Зеркальное отражение изображения.
 Если FlipHor = True, то отражение по горизонтали,
 иначе по вертикали.}
var x, y, W, H: Integer;
    Pixel_1, Pixel_2: PRGBTriple;
    MemPixel: TRGBTriple;
begin
  Bitmap.PixelFormat := pf24Bit;
  W := Bitmap.Width - 1;
  H := Bitmap.Height - 1;
  if FlipHor then {отражение по горизонтали}
    for y := 0 to H do begin
        {помещаем оба указателя на строку H:}
      Pixel_1 := Bitmap.ScanLine[y];
      Pixel_2 := Bitmap.ScanLine[y];
        {помещаем второй указатель в конец строки:}
      Inc(Pixel_2, W);
        {цикл идёт только до середины строки:}
      for x := 0 to W div 2 do begin
          {симметричные точки обмениваются цветами:}
        MemPixel := Pixel_1^;
        Pixel_1^ := Pixel_2^;
        Pixel_2^ := MemPixel;
        Inc(Pixel_1); {смещаем указатель вправо}
        Dec(Pixel_2); {смещаем указатель влево}
      end;
    end
  else {отражение по вертикали}
    {цикл идёт только до средней строки:}
    for y := 0 to H div 2 do begin
        {помещаем первый указатель на строку H,
         а второй на строку симметричную H:}
      Pixel_1 := Bitmap.ScanLine[y];
      Pixel_2 := Bitmap.ScanLine[H - y];
      for x := 0 to W do begin
          {симметричные точки обмениваются цветами:}
        MemPixel := Pixel_1^;
        Pixel_1^ := Pixel_2^;
        Pixel_2^ := MemPixel;
        Inc(Pixel_1); {смещаем указатель вправо}
        Inc(Pixel_2); {смещаем указатель вправо}
      end;
    end;
end;


Вернуться к списку функций

Наверх ▲    

Снежное вино в болгарии http://www.provinamira.ru.