ВУЗ:
Составители:
Рубрика:
- 11 -
int nX=Image1->Width;
int nY=Image1->Height;
Размер загруженного в Image изображения:
int pX=Image1->Picture->Width;
int pY=Image1->Picture->Height;
Типовой прием изменения цвета массива пикселов заключается в органи-
зации циклов по координатам:
for (int iX=100; iX<=300; iX++) // цикл по оси абсцисс
for (int iY=200; iY<=400; iY++) // цикл по оси ординат
if (Image1->Canvas->Pixels[iX][iY]==clRed) // если цвет пиксела красный...
Image1->Canvas->Pixels[iX][iY]=clBlue; // cделать его синим!
Заметим, что приведенный выше код недостаточно эффективен по скоро-
сти выполнения (реально вызываются Windows API функции GetPixel и Set-
Pixel, выполняющиеся достаточно медленно) и область его применения огра-
ничена несложными демонстрационными примерами; профессиональный
подход заключается в реализации соответствующего кода на ассемблере (с
последующей ручной оптимизацией, использовании инструкций MMX и
SSE [2]) и работе с расположенной в оперативной
памяти (ОП) копией мас-
сива пикселов (изображение при этом визуализируется только после полной
его обработки). Эффективные решения могут быть достигнуты при исполь-
зовании возможностей разработанной Microsoft Corp. библиотеки DirectX
(примеры C-программирования с использованием компонентов DirectDraw,
DirectSound, DirectMusic, DirectInput и DirectPlay этой библиотеки приведены
в [1,3]).
При работе на Delphi/C++Builder’е более профессиональным является соз-
дание внеэкранного битового о
браза (часто с помощью компонента типа
TBitmap, в дальнейших примерах используется TImage), обработка его в ОП
и 'сброс' оного на экран (режим копирования CopyMode=cmSrcCopy) с по-
мощью метода Draw [3]. Ниже приведен один из (примитивных) примеров
использования внеэкранного образа (объект tmpImage):
TImage *tmpImage; // описание объекта tmpImage
…
Image1->Picture->LoadFromFile(“имя_файла”); // загрузить и показать
// изображение из файла
tmpImage = new TImage(this); // создать экземпляра объекта TImage
tmpImage->Picture = Image1->Picture; // скопировать содержимое Image
// во внеэкранный контейнер tmpImage
for (int iX=100; iX<=300;iX++) // цикл по оси абсцисс
int nX=Image1->Width; int nY=Image1->Height; Размер загруженного в Image изображения: int pX=Image1->Picture->Width; int pY=Image1->Picture->Height; Типовой прием изменения цвета массива пикселов заключается в органи- зации циклов по координатам: for (int iX=100; iX<=300; iX++) // цикл по оси абсцисс for (int iY=200; iY<=400; iY++) // цикл по оси ординат if (Image1->Canvas->Pixels[iX][iY]==clRed) // если цвет пиксела красный... Image1->Canvas->Pixels[iX][iY]=clBlue; // cделать его синим! Заметим, что приведенный выше код недостаточно эффективен по скоро- сти выполнения (реально вызываются Windows API функции GetPixel и Set- Pixel, выполняющиеся достаточно медленно) и область его применения огра- ничена несложными демонстрационными примерами; профессиональный подход заключается в реализации соответствующего кода на ассемблере (с последующей ручной оптимизацией, использовании инструкций MMX и SSE [2]) и работе с расположенной в оперативной памяти (ОП) копией мас- сива пикселов (изображение при этом визуализируется только после полной его обработки). Эффективные решения могут быть достигнуты при исполь- зовании возможностей разработанной Microsoft Corp. библиотеки DirectX (примеры C-программирования с использованием компонентов DirectDraw, DirectSound, DirectMusic, DirectInput и DirectPlay этой библиотеки приведены в [1,3]). При работе на Delphi/C++Builder’е более профессиональным является соз- дание внеэкранного битового образа (часто с помощью компонента типа TBitmap, в дальнейших примерах используется TImage), обработка его в ОП и 'сброс' оного на экран (режим копирования CopyMode=cmSrcCopy) с по- мощью метода Draw [3]. Ниже приведен один из (примитивных) примеров использования внеэкранного образа (объект tmpImage): TImage *tmpImage; // описание объекта tmpImage … Image1->Picture->LoadFromFile(“имя_файла”); // загрузить и показать // изображение из файла tmpImage = new TImage(this); // создать экземпляра объекта TImage tmpImage->Picture = Image1->Picture; // скопировать содержимое Image // во внеэкранный контейнер tmpImage for (int iX=100; iX<=300;iX++) // цикл по оси абсцисс - 11 -
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »