PDA

View Full Version : ?How to Make GDI+ Fast



VBExpress
دوشنبه 19 فروردین 1387, 19:20 عصر
سلام بچه ها ...

+GDI خیلی کنده ... راهی وجود داره که سرعتش رو افزایش داد ؟؟؟

علیرضا مداح
سه شنبه 20 فروردین 1387, 09:42 صبح
سلام ،
در چه مواردی؟
به طور مثال شما میتوانید با ست کردن پروپرتیهای SmoothingMode و CompositingQuality مربوط به شی ء Graphics سرعت را افزایش دهید ، ولی افزایش سرعت در اغلب مواقع کاهش Performance را در پی خواهد داشت.

Behrouz_Rad
سه شنبه 20 فروردین 1387, 12:01 عصر
+GDI با ++C که Unmanaged Code هست نوشته شده. به همین دلیل در مواردی در دات نت کند عمل می کنه و این طبیعی هست.

موفق باشید.

VBExpress
چهارشنبه 21 فروردین 1387, 10:15 صبح
در چه مواردی؟
به طور مثال شما میتوانید با ست کردن پروپرتیهای SmoothingMode و CompositingQuality مربوط به شی ء Graphics سرعت را افزایش دهید ، ولی افزایش سرعت در اغلب مواقع کاهش Performance را در پی خواهد داشت.


اون کارها رو کردم ... حتی خاصیت setstyle یوزرکنترلم به AllPaintingInWmPaint ,OptimizedDoubleBuffer ,UserPaint (مواردی که تو اینترنت سرچ کردم برای افزایش سرعت ترسیم در +GDI) اما هنوز خیلی کنده !!!!

ببین من میخوام مثلا یک برنامه نقاشی درست کنم مثل Paint که کاربر با کلیک روی یک نقطه و کشیدن موس به نقطه دیگه یک خط صاف ترسیم کنه ... من از این کد استفاده میکنم :



Private mhold As Image
Private m_start As Point
PrivateSub PaintBoard_MouseDown(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMe.MouseDown
m_start = e.Location
EndSub
PrivateSub PaintBoard_MouseMove(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMe.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim mypen AsNew Pen(Color.Black, 3)
Using g As Graphics = CreateGraphics()
g.DrawImage(mhold, 0, 0)
g.DrawLine(mypen, m_start.X, m_start.Y, e.X, e.Y)
EndUsing
EndIf
EndSub
PrivateSub PaintBoard_MouseUp(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMe.MouseUp
If e.Button = Windows.Forms.MouseButtons.Left Then
Using g As Graphics = Graphics.FromImage(mhold)
g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
Dim mypen AsNew Pen(Color.Black, 3)
g.DrawLine(mypen, m_start.X, m_start.Y, e.X, e.Y)
Me.Image = mhold
EndUsing
EndIf
EndSub


همه چیز درست کار میکنه ، منتها تو رویداد MouseMove باید کل تصویر دوباره ترسیم بشه که +GDI خیلی کند این کار رو میکنه ...
می خواستم ببینم راهی وجود داره که سرعت +GDI رو تو این موارد افزایش داد ؟؟؟؟