दिलचस्प पोस्ट
यदि ("स्ट्रिंग") "स्ट्रिंग" को सही के रूप में मूल्यांकन करता है, लेकिन यदि ("string" == सच) नहीं करता है? JQuery में स्पिनर लोड करना कैसे दिखाता है? JqGrid में एकाधिक खोज कैसे कार्यान्वित करें सीएसएस पृष्ठभूमि छवि alt विशेषता जांचें कि क्या कोई स्ट्रिंग एक तिथि मान है ScrollView के अंत का पता लगाएं एक वर्ग में कन्स्ट्रक्टर निजी बनाने का क्या उपयोग है? मैं एसवीएन कमिट को कैसे वापस करूँ? X86 (-64) पर हस्ताक्षर किए गए और हस्ताक्षर किए गए गुणा करने के लिए अलग-अलग निर्देश क्यों हैं? अप्रयुक्त चर के बारे में चेतावनी को कैसे चुप कर सकता हूं? उपकरण के लिए आईओएस फ्रेमवर्क बनाना और बिटोड सक्षम करने के साथ यूनिवर्सल कॉन्फ़िगरेशन और कमांड लाइन टर्मिनल से बीटोड को अक्षम करना क्या यह पता लगाने का कोई तरीका है कि कोई छवि धुँधली है? C ++ 11/14 के मूल्य में एक स्थानीय चरणीय लौटाए जा सकते हैं, जब कोई प्रतिलिपि / चाल शामिल नहीं है, तो रिवर्स वैल्यू के परिणामस्वरूप रॉल्यूवर द्वारा बनाए जा रहे हैं? UITableView में आलसी लोड छवियां पीडीएफ को HTML में कनवर्ट करें

बिटमैप को बिटमैप सोर्स WPF में तेजी से परिवर्तित करना

मुझे 30Hz पर Image घटक पर एक चित्र खींचने की आवश्यकता है मैं इस कोड का उपयोग करता हूं:

 public MainWindow() { InitializeComponent(); Messenger.Default.Register<Bitmap>(this, (bmp) => { ImageTarget.Dispatcher.BeginInvoke((Action)(() => { var hBitmap = bmp.GetHbitmap(); var drawable = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); DeleteObject(hBitmap); ImageTarget.Source = drawable; })); }); } 

समस्या यह है कि इस कोड के साथ, मेरा CPU उपयोग लगभग 80% है, और, रूपांतरण के बिना यह लगभग 6% है

तो क्यों बिटमैप परिवर्तित करना बहुत लंबा है?
क्या तेज़ तरीका है (असुरक्षित कोड के साथ)?

वेब के समाधान से एकत्रित समाधान "बिटमैप को बिटमैप सोर्स WPF में तेजी से परिवर्तित करना"

यहां एक तरीका है जो (मेरा अनुभव) CreateBitmapSourceFromHBitmap से कम से कम चार गुना तेज है।

इसके लिए आपको परिणामस्वरूप बिटमैपसोर्स के सही PixelFormat सेट करना आवश्यक है।

 public BitmapSource Convert(System.Drawing.Bitmap bitmap) { var bitmapData = bitmap.LockBits( new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bitmap.PixelFormat); var bitmapSource = BitmapSource.Create( bitmapData.Width, bitmapData.Height, bitmap.HorizontalResolution, bitmap.VerticalResolution, PixelFormats.Bgr24, null, bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, bitmapData.Stride); bitmap.UnlockBits(bitmapData); return bitmapSource; } 

क्लीमेन्स से जवाब देने से पहले मैंने उत्तर दिया:

  WriteableBitmap writeableBitmap = new WriteableBitmap(1280, 1024, 96.0, 96.0, PixelFormats.Bgr24, null); public MainWindow() { InitializeComponent(); ImageTarget.Source = writeableBitmap; Messenger.Default.Register<Bitmap>(this, (bmp) => { ImageTarget.Dispatcher.BeginInvoke((Action)(() => { BitmapData data = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat); writeableBitmap.Lock(); CopyMemory(writeableBitmap.BackBuffer, data.Scan0, (writeableBitmap.BackBufferStride * bmp.Height)); writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, bmp.Width, bmp.Height)); writeableBitmap.Unlock(); bmp.UnlockBits(data); })); }); } 

अब मेरा CPU उपयोग लगभग 15% है