प्रतीक्षा करें - आप यहां कम लटकते फल के टुकड़े से चूक गए हैं। संभवतः वे फिर से आकार के संचालन के दौरान छवि को फिर से नहीं हटा रहे हैं। वे StretchBlt का उपयोग कर वीडियो रैम में मौजूदा छवि का आकार बदल रहे हैं - जिसे वीडियो ड्राइवर/हार्डवेयर द्वारा बहुत तेज़, तेज़ होने के लिए अनुकूलित किया जा सकता है, इससे पहले कि आप कभी भी कम गुणवत्ता वाली छवि को फिर से चला सकें।
रणनीति:
-image वस्तुओं,
छवि वस्तु की -repaint ड्रॉ पूर्ण गुणवत्ता
छवि के -repaint अंतिम स्थिति
खींच -during अद्यतन करता अंतिम स्थिति/आकार (रेक्ट) के लिए सदस्य चर है ऐसा करते हैं:
* अंतिम स्थिति/आकार से करने के लिए StrechBlt वर्तमान स्थिति/आकार
* अद्यतन अंतिम स्थिति/आकार
* यदि कुछ और की तुलना में सेकेंड। ड्राइंग, और/या> .2s अंतिम माउस चाल के बाद से, एक नई पूर्ण-गुणवत्ता वाली छवि प्राप्त करने के लिए पुनर्विचार को कॉल करें (केवल अमान्य नहीं - अब आप इसे चाहते हैं)। अगर आप अन्य ऑब्जेक्ट्स से ओवरलैप का पता लगाते हैं (
नमूना कोड मैं एक ऐप में उपयोग करता हूं जो कुछ ऐसा करता है (एक ज़ूम-इन प्रभाव जो खिड़की को आकार देता है जिसमें 100 ऑब्जेक्ट्स हो सकते हैं - एक iPad डेमो केवल चिकनी) की तरह दिखता है:
Declare Function StretchBlt Lib "gdi32.dll" _
(ByVal hdcDest As IntPtr, _
ByVal nXOriginDest As Integer, _
ByVal nYOriginDest As Integer, _
ByVal nWidthDest As Integer, _
ByVal nHeightDest As Integer, _
ByVal hdcSrc As IntPtr, _
ByVal nXOriginSrc As Integer, _
ByVal nYOriginSrc As Integer, _
ByVal nWidthSrc As Integer, _
ByVal nHeightSrc As Integer, _
ByVal dwRop As Int32) As Boolean
Using g As Graphics = f.pb.CreateGraphics
' parm of True says draw plain view - no text = looks bad Zooming.
f.DrawAll(g, True)
For i As Integer = iSteps To 1 Step -1
Dim HDC1 As IntPtr = g.GetHdc
Try
' Size of bite will not be right, but by re-adjusting
' with each iteration, it will make it to full-screen.
' Looks as good as having it right to start with, only much easier.
TopBite = objTop \ i
BottomBite = h - ((h - objBottom) \ i)
' Stretch/move the stuff.
StretchBlt(HDC1, 0, 0, w - LeftBite, h, _
HDC1, LeftBite, TopBite, w - LeftBite, BottomBite - TopBite, 13369376)
' Calculate where MyEntry would be after each stretch. Then the Bite
' size calcs above will ensure its closer next time.
SimulateStretch(objTop, objBottom, TopBite, BottomBite, h)
Finally
g.ReleaseHdc(HDC1)
End Try
' Clear exposed/invalid area to the right.
g.FillRectangle(br, w - LeftBite, 0, LeftBite, h)
' Sleep will make Swells close in duration between small/big window.
' (Can I actually sleep this short of a time?)
System.Threading.Thread.Sleep(5)
Next
End Using
बेशक
किसी यह itty- छोटे छवि और फिर आकार वापस ऊपर है, यह सुपर कम गुणवत्ता वाले और pixellated हो जाएगा - तो आप कभी कभी का एक समझदारी भरा algorythm उपयोग कर सकते हैं आकार बदलने पर mousedrag के दौरान असली onpaint आग।
टिप्पणी नट और इस के बोल्ट विशिष्ट कार्यान्वयन पर निर्भर करेगा।आपको अपने ऐप के बारे में अधिक जानकारी देना चाहिए ताकि मैं इसे सही कर सकूं (यह वास्तव में कैसा दिखता है?) मैं एक बड़े वर्ग उपयोगकर्ता नियंत्रण w/कई मालिकों के तत्वों को मान रहा हूं, सभी एक साथ समान रूप से आकार बदलते हैं। यदि आप उन्हें छोटे से शुरू करते हैं और आकार बदलते हैं तो वे ओवरलैपिंग शुरू करते हैं, आपको माउस-आकार बदलने के दौरान समय-समय पर पूर्ण रीड्रॉप्स करना होगा।
बेहतर गुणवत्ता वाले डब्ल्यू/कम प्रदर्शन के लिए, आप स्मृति एचडीसी में मुख्यालय छवि से strechblt करने में सक्षम हो सकते हैं, लेकिन मैंने कभी नहीं किया, ramifications को नहीं पता। – FastAl