Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.27;
Скачать: CL | DM;

Вниз

Paint:   Найти похожие ветки 

 
AntiFriz ©   (2003-10-11 17:19) [0]

Я хочу сделать что-то вроде Paint. Естественно в таких случаях возникает проблема с рисованием "резиновых" линий, прямоугольников, овалов и проч. Н-р: если прямоугольник, необходимо, чтобы он по движению мышки не оставлял никаких следов.

Моя идея, как это реализовать очень простая: по onMouseDown сохраняем состояние канвы, а после по onMouseMove все время:
1) восстанавливаем это состояние
2) рисуем снова наш прямоугольник

Естественно, если реализовывать это сохранение через Pixels все будет не долго, а супер-долго, поэтому я решил разбираться с GetDIBits и SetDIBits.

На данный момент не разобрался. Вот код:

handleDC:=Form1.img.Picture.Bitmap.canvas.Handle;
handleBmp:=Form1.img.Picture.Bitmap.Handle;
width:=Form1.img.Picture.Bitmap.Width;
height:=Form1.img.Picture.Bitmap.Height;


Orig_size:=width*height*4;
GetMem(Orig,orig_size);

info.bmiHeader.biSize:=sizeof(info.bmiHeader);
info.bmiHeader.biWidth:=width;
info.bmiHeader.biHeight:=-height;
info.bmiHeader.biPlanes:=1;
info.bmiHeader.biBitCount:=32;
info.bmiHeader.biCompression:=BI_RGB;
info.bmiHeader.biSizeImage:=width*height*4;
info.bmiHeader.biClrUsed:=0;
info.bmiHeader.biClrImportant:=0;
if GetDIBits(handleDC,handleBmp,0,height,Orig,info,DIB_RGB_COLORS)=0 then
ShowMessage("Error");




Все время возникает ошибка. Почему - я не понимаю. Не работал ли кто-нибудь с подобными вещами?

Если у кого есть идеи как реализовать "резиновость" иначе, приветствуется.


 
MBo ©   (2003-10-11 17:24) [1]

проще всего рисовать временные линии в режиме пера pmXor, тогда второе рисование по тому же месту сотрет.


 
AntiFriz ©   (2003-10-11 17:29) [2]

:))
Я уже оставлял этот вопрос на одном форуме - мне также ответили :)

Делов в том, что конечно xor приходит в голову первым.

Но легко понять, что это никуда не годится.
Предположим, что у нас уже нарисовано много всякой красоты.
Мы сверху накладываем прямоугольник со своей границей и со своим фоном. Естественно вся эта красота должна исчезнуть (потому что сверху прямоугольник), а поэтому дальше никакой xor не поможет.


 
афвуд ©   (2003-10-11 17:34) [3]

:( Не понятно даже что ты говоришь. Всё нормально там получается. Ты смотрел пример Graphex? Он поставляется вместе с Дельфи.


 
афвуд ©   (2003-10-11 17:39) [4]

Canvas.Draw(int X, int Y, TGraphic *Graphic);

Помоему может помочь. Наверняка сильно тормозить не будет.


 
AntiFriz ©   (2003-10-11 17:42) [5]

Спасибо буду изучать, как там они сделали


 
Palladin ©   (2003-10-11 23:09) [6]


> Мы сверху накладываем прямоугольник со своей границей и
> со своим фоном. Естественно вся эта красота должна исчезнуть
> (потому что сверху прямоугольник), а поэтому дальше никакой
> xor не поможет.

Ты не врубился что есть xor


 
AntiFriz ©   (2003-10-13 23:28) [7]

Собственно с проблемой я разобрался. Большое спасибо авфуду в Graphex все сделано как мне примерно и надо, но не могу не ответить Palladinу. Я хорошо понимаю, что такое xor, но, когда я писал то, что ты откомментировал я руководствовался примерно следующим:
У нас есть понтовый бэкграунд, мы на него накладываем прямоугольник. Если мы делаем его xorом, то от прямоугольника ничего хорошого не остается, поэтому мы не можем делать прямоугольник xorом, а делаем copy, а после copy никакой xor не поможет.

Но, собственно все что я написал уже устарело... сейчас я думаю немного с другой позиции: см Graphex


 
Palladin ©   (2003-10-14 01:25) [8]

(1 xor 3) xor 3=1

как была 1 так и осталась 1, никакая твоя красота никуда не денется, когда ты нарисуешь на ней еще раз твой прямоугольник

но я примерно понял что ты имеешь в виду, тебе наверно не нравится эффект от xor

в GraphEx так и сделано, только там не xor, а not xor


 
WondeRu ©   (2003-10-14 08:16) [9]

Приходилось делать нечто похожее на CAD систему с помощью OpenGl - все здорово и красиво получается . Найди книжку Краснова "OpenGL в проектах Delphi", там много чего интересного!))) А перерисовку приходилось делать по перемещению мыши на Пеньках первых все тормозит , а на вторых уже летает! OpenGL - фарева)))



Страницы: 1 вся ветка

Текущий архив: 2003.10.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
14-89534
Layner
2003-10-08 09:54
2003.10.27
реалии


7-89611
Jakommo
2003-08-11 14:14
2003.10.27
Запуск ехе с администраторскими правами под юзером.


14-89529
Soft
2003-10-04 16:17
2003.10.27
Выход в астрал - впечатления.


8-89409
Vovich
2003-06-26 16:53
2003.10.27
Работа с VideoCD


1-89237
Романов Р.В.
2003-10-14 22:03
2003.10.27
Сохранение/загрузка компонента