2010-05-15 13 views
8

का पिक्सेल रंग सेट करना मैं छवि के दिए गए पिक्सेल का रंग सेट करने की कोशिश कर रहा हूं।बीएमपी/जेपीजी फ़ाइल

बिना क्रिया के अपवाद:: System.InvalidOperationException: SetPixel अनुक्रमित पिक्सेल प्रारूपों की फ़ाइलें के लिए समर्थित नहीं है यहाँ कोड स्निपेट

 Bitmap myBitmap = new Bitmap(@"c:\file.bmp"); 

     for (int Xcount = 0; Xcount < myBitmap.Width; Xcount++) 
     { 
      for (int Ycount = 0; Ycount < myBitmap.Height; Ycount++) 
      { 
       myBitmap.SetPixel(Xcount, Ycount, Color.Black); 
      } 
     } 

जब भी मैं निम्न अपवाद प्राप्त है।

अपवाद bmp और jpg फ़ाइलों के लिए दोनों फेंक दिया है।

उत्तर

6

कोशिश निम्नलिखित

Bitmap myBitmap = new Bitmap(@"c:\file.bmp"); 
MessageBox.Show(myBitmap.PixelFormat.ToString()); 

आप मिलता है "Format8bppIndexed" तो बिटमैप से प्रत्येक पिक्सेल के रंग एक सूचकांक द्वारा 256 रंगों की तालिका में बदल दिया जाता है । और प्रत्येक पिक्सेल के लिए केवल एक बाइट द्वारा प्रतिनिधित्व किया जाता है।

if (myBitmap.PixelFormat == PixelFormat.Format8bppIndexed) { 
    Color[] colorpal = myBitmap.Palette.Entries; 
} 
15

आपको छवि को अनुक्रमित से अनुक्रमित में कनवर्ट करना होगा। यह परिवर्तित करने के लिए इस कोड का प्रयास करें:

public Bitmap CreateNonIndexedImage(Image src) 
    { 
     Bitmap newBmp = new Bitmap(src.Width, src.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

     using (Graphics gfx = Graphics.FromImage(newBmp)) { 
      gfx.DrawImage(src, 0, 0); 
     } 

     return newBmp; 
    } 
+0

जब मैं इस विधि को चलाता हूं तो 'स्मृति से बाहर' अपवाद प्राप्त करना – talha06

1

ही रूपांतरण का उपयोग किया जा सकता है "क्लोन" विधि: आप रंग की एक सरणी मिल सकती है।

Bitmap IndexedImage = new Bitmap(imageFile); 

    Bitmap bitmap = IndexedImage.Clone(new Rectangle(0, 0, IndexedImage.Width, IndexedImage.Height), System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
+0

रंग प्रारूप को कम करने के लिए काम नहीं करता है (32 से 8bpp तक) – Pedro77