Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
59 / 31 / 15
Регистрация: 30.05.2009
Сообщений: 227
1

Какой способ рисования самый быстрый?

04.07.2009, 21:37. Показов 4366. Ответов 4
Метки нет (Все метки)

Вот нашел интересный код рисования на WinApi, переводил с языка С++:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Button1Click(Sender: TObject);
var hMemDC:HDC;
hOldBitmap:HBITMAP;
h:hdc;
BrushHandle,OldBrushHandle:HBRUSH;
PenHandle,OldPenHandle:HPEN;
begin
h:=GetWindowDC(Handle);
hMemDC:=CreateCompatibleDC(h);
if hMemDC<>0 then begin
   // рисуем все что требуется
   hOldBitmap:= SelectObject(hMemDC, image1.Picture.Bitmap.Handle);//рисуем изображение
   BrushHandle := CreateSolidBrush(clGreen);//создаем кисть
   OldBrushHandle := SelectObject(hMemDC, BrushHandle);//получаем старую кисть
   PenHandle := CreatePen(PS_SOLID, 3, RGB(125, 207, 95));//создаем карандаш
   OldPenHandle := SelectObject(hMemDC, PenHandle);//получаем старый карандашь
   Ellipse(hMemDC, 0, 0, 100, 100);//рисуем круг
   // копируем биты
   BitBlt(h, 0, 0, image1.Width, image1.Height, hMemDC, 0, 0, SRCCOPY);
   // возвращаем старый bitmap
   SelectObject(hMemDC, hOldBitmap);
   // освобождаем контекст
   DeleteDC(hMemDC);
end;
end;
На языке C++ тут: http://graphics.cs.msu.ru/cour... tth_sEc2.6

Или использовать стандартный подход в Delphi? Какой способ рисования быстрее? Все ли правильно я переписал с языка C++?

Я же считаю что на Winapi гораздо лучше рисовать, чем использовать стандартный подход.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2009, 21:37
Ответы с готовыми решениями:

Самый быстрый способ копирования файлов
Есть много способов копирования фалов. Например средствами Windows (FileCopy) Побайтовое чтение...

Быстрый способ оперирования данными
Приветствую. Подскажите, посредством чего в Дельфи 2010 можно без задержек оперировать данными?...

Перечисляемый тип данных. Определить какой месяц и в какой столице самый теплый
type Cap = (Moscow, Berlin, London, Vena); Month = (Apr, May, Jun, Jul, Aug, Sep); var t:...

Быстрый способ копирования всех свойств компонента созданного рантайм с уже существующего
Добрый день. Нет ли случайно быстрого способа копирования всех свойств компонента созданного...

4
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.07.2009, 21:54 2
а стандартный подход дельфи, это какой, расскажите-ка.
0
59 / 31 / 15
Регистрация: 30.05.2009
Сообщений: 227
05.07.2009, 10:54  [ТС] 3
Ну просто я имел ввиду что можно просто рисовать так:
Delphi
1
application.MainForm.Canvas.Ellipse(0,0,100,100);
Какие еще способы рисования существуют?
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.07.2009, 11:13 4
Этот способ:
Delphi
1
2
3
   Ellipse(hMemDC, 0, 0, 100, 100);//рисуем круг
   // копируем биты
   BitBlt(h, 0, 0, image1.Width, image1.Height, hMemDC, 0, 0, SRCCOPY);
и тот, что в предыдущем сообщении рисуют, используя одинаковые методы. А именно, функции winapi gdi32.
А рисовать быстрее всего можно используя буфер картинки в памяти. Картинка же лежит в памяти. Вот используя указатель, на начало ее буфера и смещение, ты можешь рисовать, напрямую меняя байты в буфере. Это будет быстро.
0
59 / 31 / 15
Регистрация: 30.05.2009
Сообщений: 227
05.07.2009, 13:28  [ТС] 5
Цитата Сообщение от Vourhey Посмотреть сообщение
А рисовать быстрее всего можно используя буфер картинки в памяти. Картинка же лежит в памяти. Вот используя указатель, на начало ее буфера и смещение, ты можешь рисовать, напрямую меняя байты в буфере. Это будет быстро.
А можно ли пример кода того как такое сделать? А то я понять не могу как такое записать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2009, 13:28

Подскажите самый простой способ очистки экрана в консольном Delphi (альтернативу clrscr в pascal)
Желательно покажите на примере любой программы, пожалуйста.

Логи - какой способ лучше выбрать ?
Доброго времени суток. Подскажите какой способ лучше выбрать для ведения логов, для такой задачи: ...

Работа с файлами, какой способ сейчас современный?
Есть программа с настройками и базой данных. Задача сохранить/прочитать настройки и данные базы в...

Какой способ реализации горячих клавиш лучше?
Прочитал множество топиков на форуме и статей в инете на эту тему, и так и не понял, какой вариант...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru