Конференция "Media" » GDI+ <> canvas.copyrect [D7, WinXP]
 
  • BB2000 (07.05.07 21:32) [0]
    Добрых суток, спецы и осваивуище...
    Помогите!
    Вопрос по GDI+.
    какой есть аналог copyrect у GDI+.

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

    Спасибо, уделите вниманием. Плиз! Или хоть где капать-то.
  • antonn © (07.05.07 22:01) [1]

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

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

    вообще canvas.copyrect() довольно быстро работает. На крайний случай есть BitBlt() - вроде еще быстрее.
  • Efir © (07.05.07 22:41) [2]
    В GDI+ тебе придётся копировать из объекта TGPImage/TGPBitmap, т.е., напрямую с TBitmap ничего не выйдет, поэтому сначала придётся перевести TBitmap в TGPBitmap, а потом с него и копировать. К тому же, если тебе не нужно сглаживание или уменьшение изображения, то CopyRect вполне хватит.
  • antonn © (08.05.07 00:01) [3]
    вообще copyrect() поддерживает ресайз изображения:) и даже переворот его, как по вертикали, так и по горизонтали:)
  • BB2000 (08.05.07 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 (08.05.07 00:09) [5]

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

    Согласен! Но не на больших размеров.
  • BB2000 (08.05.07 00:11) [6]
    Таким методом пытался вывести изобр.. но никак нормально не вЫходИт.
    Вот и думаю, КАК это сделать БЫСТРО!
  • Efir © (08.05.07 12:44) [7]
    Ну в крайнем случае используй CachedBitmap.
  • JohnJ (19.03.08 00:52) [8]
    Clone
 
Конференция "Media" » GDI+ <> canvas.copyrect [D7, WinXP]
Есть новые Нет новых   [134431   +14][b:0][p:0.001]