Программирование мультимедиа-систем. Баканов В.М. - 14 стр.

UptoLike

Составители: 

- 14 -
комбинацией имеющегося и наложенного изображения с логическим AND и
др.).
Копировать часть изображения в Карман удобно с помощью внеэкранного
контейнера (необходимое условие применения нижеприведенной функции
суть xLeft<xRight && yTop<yBottom, в противном случае необходима пере-
становка координатсм. функцию ShiftRectCoord в модуле Main.cpp про-
граммы Paint; структура типа TRect представляет описывающие прямоуголь-
ник координаты {xLeft, yTop, xRight, yBottom}):
void __fastcall TForm1::CopyRectToClipboard(int xLeft, int yTop,
int xRight, int yBottom)
{ // копировать прямоугольную часть исходного изображения
// с левым верхним углом (xLeft,yTop) и правым нижним (xRight,tBottom)
TRect rs, rd;
TImage *tmpImage;
tmpImage = new TImage(this); // создать экземпляр объекта TImage
rs = Rect(xLeft,yTop, xRight,yBottom); // область копирования в Image1
rd = Rect(0,0, xRight - xLeft,yBottom - yTop); // область копирования в tmpImage
tmpImage->BoundsRect = rd; // настройка размеров tmpImage
// tmpImage->Width = xRight - xLeft; // та же самая настойка (ширина)
// tmpImage->Height = yBottom - yTop; // … высота
tmpImage->Canvas->CopyRect(rd,Image1->Canvas,rs); // копировать в tmpImage
Clipboard()->Assign(tmpImage->Picture); // копировать из tmpImage в Clipboard
delete tmpImage; // уничтожить tmpImage
}
Частой процедурой перед применением преобразований к части изображе-
ния (копированием в Карман, деформации, цветокоррекцией и др.) является
выделение (прямоугольной) части изображениярезиновой рамкой’, пере-
мещаемой по экрану при манипуляциях мышью. Проблемой при этом явля-
ется необходимость восстановления (после каждого перемещения мыши)
части изображения, ‘испорченного перемещающейся рамкой. Стандартным
приемом является копирование
прямоугольного участка изображения перед
каждым перемещением правого нижнего угла рамки (левый верхний считает-
ся зафиксированным щелчком кнопки мыши) во внеэкранный образ и вос-
становление этой части изображения после смещения рамки.
В рассматриваемой программе Pain (модуль Main.cpp проекта Paint.bpr):
функция Image1MouseDown (вызываемая по событию Image1MouseDown –
нажатие кнопки мыши’) запоминает (передаваемые через формальные па-
раметры)
координаты левой верхней точки рамки в переменных InitialX,
InitialY, создает внеэкранный контейнер tmpImage и копирует в него изо-
бражение,
функция Image1MouseMove (событие Image1MouseMove – ‘перемещение
указателя мыши’) путем вызова отрисовываетрезиновую рамкуи осуще-
комбинацией имеющегося и наложенного изображения с логическим AND и
др.).
  Копировать часть изображения в Карман удобно с помощью внеэкранного
контейнера (необходимое условие применения нижеприведенной функции
суть xLeftBoundsRect = rd; // настройка размеров tmpImage
   // tmpImage->Width = xRight - xLeft; // та же самая настойка (ширина)
   // tmpImage->Height = yBottom - yTop; // … высота
   tmpImage->Canvas->CopyRect(rd,Image1->Canvas,rs); // копировать в tmpImage
   Clipboard()->Assign(tmpImage->Picture); // копировать из tmpImage в Clipboard
   delete tmpImage; // уничтожить tmpImage
  }

  Частой процедурой перед применением преобразований к части изображе-
ния (копированием в Карман, деформации, цветокоррекцией и др.) является
выделение (прямоугольной) части изображения ‘резиновой рамкой’, пере-
мещаемой по экрану при манипуляциях мышью. Проблемой при этом явля-
ется необходимость восстановления (после каждого перемещения мыши)
части изображения, ‘испорченного’ перемещающейся рамкой. Стандартным
приемом является копирование прямоугольного участка изображения перед
каждым перемещением правого нижнего угла рамки (левый верхний считает-
ся зафиксированным щелчком кнопки мыши) во внеэкранный образ и вос-
становление этой части изображения после смещения рамки.
  В рассматриваемой программе Pain (модуль Main.cpp проекта Paint.bpr):

• функция Image1MouseDown (вызываемая по событию Image1MouseDown –
  ‘нажатие кнопки мыши’) запоминает (передаваемые через формальные па-
  раметры) координаты левой верхней точки рамки в переменных InitialX,
  InitialY, создает внеэкранный контейнер tmpImage и копирует в него изо-
  бражение,
• функция Image1MouseMove (событие Image1MouseMove – ‘перемещение
  указателя мыши’) путем вызова отрисовывает ‘резиновую рамку’ и осуще-


                                      - 14 -