Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];

Вниз

рисование через буфер (GDI+)   Найти похожие ветки 

 
Tab   (2006-10-19 09:37) [0]

Хочу рисовать на битмапе, потом уже копировать на graphics. Что не так делаю?

 graphics_buf:=TGPGraphics.Create();
 bitmap:=TGPBitmap.Create(320,400,graphics_buf);

 graphics := TGPGraphics.Create(Form1.PaintBox1.Canvas.Handle);
 pen:= TGPPen.Create(MakeColor(255, 0, 0, 255));
 graphics_buf.DrawLine(pen, 0, 0, 200, 100);
 graphics.drawImage(bitmap, 10, 10);
 graphics.Free;
 pen.Free;


 
Ricks ©   (2006-10-19 17:49) [1]

Попробуй создать временный DC и на нем создавать TGPGraphics.
А вообще посмотри, как еще можно создавать TGPGraphics - скорее всего проблема в этом!


 
Tab   (2006-10-22 08:23) [2]

примерчик бы.


 
SamBrook ©   (2006-10-22 18:54) [3]


> Хочу рисовать на битмапе, потом уже копировать на graphics.

Просто включите двойную буферизацию и рисуйте как обычно. Эффект будет тот же.


 
Tab   (2006-10-23 12:50) [4]


> Просто включите двойную буферизацию и рисуйте как обычно.

как ее включить?


 
Tab   (2006-10-23 12:50) [5]

Сделал следующим образом:
procedure MakeMeta;
var
i: integer;
begin
 metafile := TGPMetaFile.Create(Form1.PaintBox1.Canvas.Handle,EmfTypeEmfPlusDual);
 graphics_buf2:=TGPGraphics.Create(metafile);
 if Form1.CheckBox2.Checked then
 graphics_buf2.SetSmoothingMode(SmoothingModeHighQuality);
 graphics_buf2.FillRectangle(br,0,0,400,300);
 for i:=1 to ObjCount_l do
 begin
       Lr[i].Draw(graphics_buf2);
 end;
 graphics_buf2.free;
end;
procedure Draw;
var
 i: integer;
begin
 graphics := TGPGraphics.Create(Form1.PaintBox1.Canvas.Handle);
 graphics.DrawImage(metafile,0,0,delta_x,delta_y,400,300,UnitPixel);
 graphics.Free;
end;
MakeMeta вызываю только один раз при создании metafile a draw потом при обовлении PaintBox в MouseMove.
Вот при MouseMove начинается мерцание.


 
Ricks ©   (2006-10-23 12:56) [6]

Попробуй так:

var G   : TGPGraphics;
   aDC : HDC;
   aBM : HBITMAP;
begin
aDC:=CreateCompatibleDC(0);
aBM:=CreateCompatibleBitmap(Message.DC, ClientWidth, ClientHeight);
SelectObject(aDC, aBM);
G:=TGPGraphics.Create( aDC );
G.SetInterpolationMode( InterpolationModeNearestNeighbor );
try
 if Transparent then DrawThemeParentBackground(Handle, aDC, nil);
 RenderWindow( G, MakeRect(0, 0, Pred(ClientWidth), Pred(ClientHeight) ), aDC );
 BitBlt(Message.DC, 0, 0, ClientWidth, ClientHeight, aDC, 0, 0, SRCCOPY);
finally
 G.Free;
 DeleteObject( SelectObject(aDC, 0) );
 DeleteObject(aBM);
 DeleteDC(aDC);
end;


У меня это стоит на WMEraseBackground


 
Ricks ©   (2006-10-23 12:58) [7]

Это я делал отдельный control, но принцип такой-же:
• создаешь bitmap
• на нем создаешь DC, на этом DC создаешь TGPGraphics
• рисуешь
• BitBlt на нужный DC
• Удаляешь все на...


 
Tab   (2006-10-23 13:16) [8]

один вопрос, если на Bitmap рисуются фигуры, линии квадртаты, потом когда я увеличиваю изображение оно малость "портится", пытался обойти это рисуя на metafile, но что-то не очень.
Есть какой-нибудь способ стобы при увеличении линии оставались такими-же?


 
SamBrook ©   (2006-10-23 22:18) [9]

Двойную буфферизацию включить не просто а очень просто
для наследников tWinControl  DoubleBuffered:=true
для tgraphicContol - parent.DoubleBuffered:=true.

Собстенно все что Вы пытаетесь сделать и есть двойная буферизация.



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

Форум: "Media";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.048 c
4-1169557572
5n4k3
2007-01-23 16:06
2007.07.08
drag&drop ИЗ ListBox в Проводник


15-1181048206
Desdechado
2007-06-05 16:56
2007.07.08
Как подключить bink video?


2-1181880453
Max_
2007-06-15 08:07
2007.07.08
MySQL


15-1181296248
Serg1968
2007-06-08 13:50
2007.07.08
Аудио


15-1181125978
Nic
2007-06-06 14:32
2007.07.08
Nokia 6080





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский