2008-12-30 9 views
9
Image.FromFile(@"path\filename.tif") 

या.NET 2.0 में एक बहु-फ्रेम TIFF छवि प्रारूप छवि को कैसे खोलें?

Image.FromStream(memoryStream) 

दोनों सिर्फ एक ही फ्रेम भले ही स्रोत एक बहु फ्रेम TIFF फ़ाइल है के साथ छवि वस्तुओं का उत्पादन। आप इन छवियों को बनाए रखने वाली छवि फ़ाइल कैसे लोड करते हैं? छवियों का उपयोग करके टिफ को सहेजा जाता है। फ्रेम द्वारा विधियों को फ्रेम करें। वे अन्य दर्शकों में काम करते हैं लेकिन .NET छवि विधियां इन फ्रेमों को लोड नहीं करेंगे, केवल पहले।

क्या इसका मतलब यह है कि एक विधि से बहु-फ्रेम टीआईएफएफ वापस करने का कोई तरीका नहीं है जहां मैं बिटमैप्स के संग्रह में फ्रेम के रूप में उपयोग करने के लिए गुजर रहा हूं?

उत्तर

22

यहाँ मैं क्या उपयोग है:

private List<Image> GetAllPages(string file) 
{ 
    List<Image> images = new List<Image>(); 
    Bitmap bitmap = (Bitmap)Image.FromFile(file); 
    int count = bitmap.GetFrameCount(FrameDimension.Page); 
    for (int idx = 0; idx < count; idx++) 
    { 
     // save each frame to a bytestream 
     bitmap.SelectActiveFrame(FrameDimension.Page, idx); 
     MemoryStream byteStream = new MemoryStream(); 
     bitmap.Save(byteStream, ImageFormat.Tiff); 

     // and then create a new Image from it 
     images.Add(Image.FromStream(byteStream)); 
    } 
    return images; 
} 
+0

क्या इसका मतलब यह है कि एक विधि से बहु-फ्रेम टीआईएफएफ वापस करने का कोई तरीका नहीं है जहां मैं फ्रेम के रूप में उपयोग किए जाने वाले बिटमैप्स के संग्रह में गुजर रहा हूं? – mirezus

+1

बहुत अधिक हाँ - आपको याद रखना होगा कि एक मल्टीफ्रेम टीआईएफएफ में प्रत्येक फ्रेम में एन्कोडिंग विकल्प (संपीड़न, रंग, गुणवत्ता) का अपना सेट हो सकता है। दूसरी ओर बिटमैप्स बहुत सरल जानवर हैं। –

0

bitmap.Dispose();

लूप के बाद आपको बिटमैप का निपटान करने की आवश्यकता है। अन्यथा आपको अन्य प्रक्रिया में एक ही फ़ाइल का उपयोग करने का प्रयास करते समय त्रुटि "अन्य प्रक्रिया का उपयोग कर फ़ाइल" मिलती है।

1

मैं नीचे विधि का उपयोग कर बहु-फ्रेम टिफ़ को संभालने में सक्षम था।

Image multiImage = Image.FromFile(sourceFile); 

multiImage.Save(destinationFile, tiff, prams); 

int pageCount = multiImage.GetFrameCount(FrameDimension.Page); 

for (int page = 1; page < pageCount; page++) 
{ 
    multiImage.SelectActiveFrame(FrameDimension.Page,page); 
    multiImage.SaveAdd(dupImage,prams); 
} 

multiImage.SaveAdd(newPage, prams); 
multiImage.Dispose(); 

मैंने .NET 2.0 में समाधान का प्रयास नहीं किया है, लेकिन एमएसडीएन कक्षा के सदस्यों को मौजूद होने के लिए दिखाता है। यह मेरी समस्या को .NET 4.5.2 में ठीक कर दिया।

संबंधित मुद्दे