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

Вниз

GDI+ <> canvas.copyrect   Найти похожие ветки 

 
BB2000   (2007-05-07 21:32) [0]

Добрых суток, спецы и осваивуище...
Помогите!
Вопрос по GDI+.
какой есть аналог copyrect у GDI+.

Мне надо скопировать определённый регион канвы(Bitmap), хотелось бы это сделать с помощью GDI+. (вроде он быстрей работает.?)
Суть проблемы:
Имеется Картинка в битмапе(0,0,200,300), копировать надо много, часто и по частям в Runtime, при этом размер Distination постоянно меняется, от малого до мах.(во весь экран).
Если выводить стандартным методом, то отрисовка занимает много времени,(~300мсек.) тормоз на лицо. Очень заметно на экране,(метод рисования в "тени" тоже не проходит.). Вот хотелось бы узнать, как это сделать при помощи GDI+!

Спасибо, уделите вниманием. Плиз! Или хоть где капать-то.


 
antonn ©   (2007-05-07 22:01) [1]


> Если выводить стандартным методом

стандартный код в студию!

вообще canvas.copyrect() довольно быстро работает. На крайний случай есть BitBlt() - вроде еще быстрее.


 
Efir ©   (2007-05-07 22:41) [2]

В GDI+ тебе придётся копировать из объекта TGPImage/TGPBitmap, т.е., напрямую с TBitmap ничего не выйдет, поэтому сначала придётся перевести TBitmap в TGPBitmap, а потом с него и копировать. К тому же, если тебе не нужно сглаживание или уменьшение изображения, то CopyRect вполне хватит.


 
antonn ©   (2007-05-08 00:01) [3]

вообще copyrect() поддерживает ресайз изображения:) и даже переворот его, как по вертикали, так и по горизонтали:)


 
BB2000   (2007-05-08 00:05) [4]

Как мне известно BitBlt с регионами не пашет.
Ну к примеру, в TGPBitmap я могу перевести в самом начале проги, мне главно орудовать с тем что есть TGPBitmap. КАК? Как, вывести...
стандартный код в студию!

PLImage.Canvas.CopyRect(Rect(0,0,wtc,tboffset),PLBmp.Canvas,Rect(0,0,wtc,tboffse t));
PLImage.Canvas.CopyRect(Rect(0,(PLImage.Height-tboffset),wtc,PLImage.Height),PLBmp.Canvas,Rect(0,(PLBmp.Height-tboffset),wtc,PLBmp.Height));

for i:=1 to f+1 do begin
PLImage.Canvas.CopyRect(Rect((wtc+((i-1)*LIH)),0,(wtc+(i*LIH)),tboffset),PLBmp.Canvas,Rect(wtc,0,(PLBmp.Width-30),tboffset));
PLImage.Canvas.CopyRect(Rect((wtc+((i-1)*LIH)),(PLImage.Height-tboffset),(wtc+(i*LIH)),PLImage.Height),PLBmp.Canvas,Rect(wtc,(PLBmp.Height-tboffset),(PLBmp.Width-30),PLBmp.Height));
end;

Где: PLImage= куда выводим(Image, Paint,Form - без разници! ТОРМОЗ.)
PLBmp = расположение текстуры.(размер небольшой(0,0,300,200))


 
BB2000   (2007-05-08 00:09) [5]


> вообще canvas.copyrect() довольно быстро работает

Согласен! Но не на больших размеров.


 
BB2000   (2007-05-08 00:11) [6]

Таким методом пытался вывести изобр.. но никак нормально не вЫходИт.
Вот и думаю, КАК это сделать БЫСТРО!


 
Efir ©   (2007-05-08 12:44) [7]

Ну в крайнем случае используй CachedBitmap.


 
JohnJ   (2008-03-19 00:52) [8]

Clone



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1277572345
New555
2010-06-26 21:12
2010.09.19
Использовние sndPlaySound для проигрывания нескольких файлов


2-1277301836
winner13
2010-06-23 18:03
2010.09.19
IdHTTP настолько туп что не могу понять как использовать.


15-1276784558
Aleks
2010-06-17 18:22
2010.09.19
Armadillo (неожиданное автозакрытие программы)


15-1276582543
12
2010-06-15 10:15
2010.09.19
Мысль. Сельское хоз-во. Давление и полив.


15-1277551866
Илья_
2010-06-26 15:31
2010.09.19
Компонент для работы с локальной сетью