"работа с графическими слоями"


Страницы: 1
Пользователь: liitle
Сообщений: 1
Статус: Незримый
Зарегистрирован:
27 января 2011, 17:02
Был:27 января 2011, 17:18
liitle
smsup
Дата: 27 января 2011, 17:14 Сообщение № 1
Уважаемые знатоки, просьба подсказать или даже показать как инструментами языка с/с++/с# написать программу, позволяющую работать с графическими слоями(подобно Photoshop)
Сама идея программы заключается в том, чтобы на карту местности(снимок) наносить в режиме полупрозрачности температурный градиент, меняющийся в интерактивном режиме.
Пользователь: DMT
Сообщений: 123
Статус: Программист
Зарегистрирован:
18 октября 2007, 2:35
Был:13 ноября 2017, 4:54
DMT
smsup
Дата: 27 января 2011, 17:26 Сообщение № 2
Создавать для каждого слоя свой Bitmap
Для получения одного рисунка объединить все в зависимости от позиции рисунка на общей канве с помощью:
Bitmap.Canvas.CopyRect в режиме
Bitmap.Canvas.CopyMode=SRCAND;
Где
SRCAND = $008800C6;

Это по крайней мере на delphi так.

на си++
Код на C++
  1. BitBlt(handle, 0, 0, ptSize.x, ptSize.y, hdcBack, 0, 0, SRCAND);
  2.  
При использовании обязательна ссылка на http://DMTSoft.ru



Так создавать битмапы:
Код на C++
  1. CBitmap b; //пока не имеет размеров
  2. Bitmap имеет смысл создавать такой же, как область экрана, т.е. bitmap должен быть совместим с данным экраном, точнее с данным типом отображения.
  3. b.CreateCompatibleBitmap( pDC, //указатель на CDC
  4. w, //ширина
  5. h ) ; //высота
  6. Не существует битовых образов для обычных контекстов отображения (pDC - обычный контекст).
  7. CBitmap b ;
  8. CClientDC dc ( this ) ;
  9. b.CreateCompatibleBitmap ( &dc, 1024, 768 ) ;
  10. Для того, чтобы рисовать на bitmap, нужно завести специальный контекст, называемый контекстом памяти, и выбрать этот bitmap в контекст памяти.
  11. CDC memDC ; //оболочка MFC над объектом Windows.
  12. //Сам объект создается по Create.
  13. memDC.CreateCompatibleDC(&dc);
  14. //Выберем bitmap в контекст
  15. memDC.SelectObject( &b ) ;
  16. //Теперь можно рисовать на bitmap. Хотя сейчас bitmap заполнен чем
  17. //попало, поэтому если вы не будете заполнять полностью часть bitmap,
  18. //выводимую на экран, то сначала bitmap нужно очистить, например
  19. //с помощью FillRect.
  20. memDC.Rectangle ( 10, 10, 100, 100 ) ;
  21.  
При использовании обязательна ссылка на http://DMTSoft.ru


Страницы: 1