Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.011 c
1-89243
Dimaz-z
2003-10-14 20:33
2003.10.27
Как выводить пропорциональную картину в DBImage?


1-89350
KIR
2003-10-17 10:37
2003.10.27
Как распечатать несколько графиков (TChart) на одной странице?


3-89100
denmin
2003-10-08 13:58
2003.10.27
Помогите!!!!! Срочно!1


3-89125
x_ANDREW_x
2003-10-08 00:18
2003.10.27
Пропадают UDF в базе


3-89151
Bless
2003-10-07 09:11
2003.10.27
Что означает такая ошибка?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский