ВУЗ:
Составители:
Рубрика:
- 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
- …
- следующая ›
- последняя »
