Форум: "Основная";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.019 c