का उपयोग कर स्मृति से बनाई गई बिटमैप जेडीआई + बिटमैप को सहेजते समय सामान्य त्रुटि एसओ और वेब पर मेरे शोध के अनुसार स्पष्ट रूप से एक आम समस्या है। निम्न सरलीकृत स्निपेट को देखते हुए:जीडीआई + जेनेरिक त्रुटि बचत लॉकबिट
byte[] bytes = new byte[2048 * 2048 * 2];
for (int i = 0; i < bytes.Length; i++)
{
// set random or constant pixel data, whatever you want
}
Bitmap bmp = new Bitmap(2048, 2048, PixelFormat.Format16bppGrayScale);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, 2048, 2048), ImageLockMode.ReadWrite, bmp.PixelFormat);
System.Runtime.InteropServices.Marshal.Copy(bytes, 0, bmpData.Scan0, 8388608);
bmp.UnlockBits(bmpData);
bmp.Save(@"name.bmp");
परिणामस्वरूप 0x80004005 जेनेरिक त्रुटि होती है। इसके लिए सामान्य कारण घटकों पर ताले कहा जाता है, लेकिन मुझे यहां कुछ भी नहीं दिख रहा है। क्या मैं सिर्फ अंधा हूं? जिस मार्ग को मैं सहेज रहा हूं, वह निश्चित रूप से मौजूद है, केवल खाली बीएमपी फ़ाइल बनाई गई है (0 बी)।
पृष्ठभूमि: मुझे कैमरे के ड्राइवर से पिक्सेल डेटा मिल रहा है जिसे मैं एक सी ++/सीएलआई रैपर का उपयोग करके .NET में स्थानांतरित कर रहा हूं, इसलिए उपरोक्त बिटमैप ऑब्जेक्ट को फ़ंक्शन कॉल द्वारा वापस किया जाता है। लेकिन चूंकि यह छोटा उदाहरण पहले से विफल रहता है, मुझे लगता है कि एडाप्टर में कुछ भी गलत नहीं है।
किसी भी सुझाव की अत्यधिक सराहना की जाती है!
16-बिट ग्रेस्केल शायद वैध बीएमपी प्रारूप नहीं है? –
मैंने ईमानदार होने के लिए इसे नहीं माना है। अनुक्रमित 8bpp पर स्विच करने से फ़ाइल को किसी भी त्रुटि के बिना बनाया गया। अंतिम लक्ष्य ग्रेस्केल 16 बीपीपी छवि को पीएनजी के रूप में सहेजना है, लेकिन उपरोक्त को 'bmp.Save (@" name.bmp ", ImageFormat.Png) से बदलना;' या तो काम नहीं किया। – simd
क्या आपने सहेजते समय ImageFormat.Bmp निर्दिष्ट करने का प्रयास किया है? यह उत्तर देखें: http://social.msdn.microsoft.com/Forums/vstudio/en-US/10252c05-c4b6-49dc-b2a3-4c1396e2c3ab/action?threadDisplayName=writing-a-16bit-grayscale-image – Ben