2010-08-25 17 views
6

मैं एक पेज टीआईएफएफ को पीएनजी में एक पीएनजी में कनवर्ट करने में सक्षम हूं, हालांकि, मैं एक बहुपक्षीय टीआईएफएफ के लिए यह कैसे करूँगा?मल्टीपाज टीआईएफएफ को पीएनजी में कनवर्ट करें .नेट

उत्तर

6

आप एक पाश में सक्रिय फ्रेम (पेज) का चयन करें और एक png करने के लिए प्रत्येक टिफ पेज परिवर्तित करना चाहिए।

int pageCount = 1; 
try 
{ 
    pageCount = bmp.GetFrameCount(FrameDimension.Page); 
} 
catch (Exception) 
{ 
    // sometimes GDI+ throws internal exceptions. 
    // just ignore them. 
} 

for (int page = 0; page < pageCount; page++) 
{ 
    bmp.SelectActiveFrame(FrameDimension.Page, page); 
    // save or otherwise process tiff page 
} 

यह कोड मानता है कि आप सिस्टम में टिफ छवि लोड कर सकते हैं। ड्रॉइंग.बिटमैप ऑब्जेक्ट।

1

Imagemagick छवियों के साथ बस कुछ भी कर सकता है लेकिन इसमें से चुनने के विकल्पों की भारी मात्रा के कारण इसे सही तरीके से प्राप्त करने में कुछ समय लग सकता है। आप Imagemagick के साथ सीधे काम करने के लिए इंटरऑप का उपयोग कर सकते हैं या आप .NET wrapper का उपयोग कर सकते हैं। मैंने केवल इंटरऑप का उपयोग किया है, इसलिए मुझे नहीं पता कि wrapper कितना अच्छा या बुरा है।

private readonly ImageMagickObject.MagickImageClass _imageMagick = new ImageMagickObject.MagickImageClass(); 

var parameters = new object[] {sourcePath, destPath}; 
_imageMagick.Convert(ref parameters); 

पैरामीटर आपको ImageMagick वेबसाइट पर अपने लिए ढूंढना होगा। कमांड लाइन पैरामीटर के लिए मदद देखें और मल्टीपाज टिफ़ के लिए फोरम खोजें। मुझे लगता है कि आप कई पीएनजी में टिफ को विभाजित करना चाहते हैं? तो फिर इस तरह शायद कुछ:

परिवर्तित multipage.tif एकल% d.png

1

3'rd पार्टी विधानसभाओं के लिए आवश्यकता के बिना पूरा उदाहरण:

' MAIN CODE ' 

Dim ImageBitmap = Bitmap.FromStream(ImageStream) 

Dim FrameCount = ImageBitmap.GetFrameCount(FrameDimension.Page) 

Dim RunningHeight As Integer = 0 
Dim MaxWidth As Integer = 0 

For MeasurementFrameIndex As Integer = 0 To FrameCount - 1 
    ImageBitmap.SelectActiveFrame(FrameDimension.Page, MeasurementFrameIndex) 

    RunningHeight += ImageBitmap.Height 
    MaxWidth = Math.Max(MaxWidth, ImageBitmap.Width) 
Next 

Dim CombinedBitmap As New Bitmap(MaxWidth, RunningHeight) 
Dim RunningVerticalPosition As Integer = 0 

For CombinationFrameIndex As Integer = 0 To FrameCount - 1 
    ImageBitmap.SelectActiveFrame(FrameDimension.Page, CombinationFrameIndex) 

    EmbedBitmap(ImageBitmap, CombinedBitmap, RunningVerticalPosition) 

    RunningVerticalPosition += ImageBitmap.Height + 1 
Next 



    ' SUPPORT ROUTINES ' 

Private Shared Sub EmbedBitmap(
     SourceBitmap As Bitmap, 
     ByRef DestinationBitmap As Bitmap, 
     VerticalPosition As Integer) 

    Dim SourceRectangle As New Rectangle(
     New Point(0, 0), 
     New Size(SourceBitmap.Width, SourceBitmap.Height)) 

    Dim DestinationRectangle As New Rectangle(
     New Point(0, VerticalPosition), 
     New Size(SourceBitmap.Width, SourceBitmap.Height)) 

    Using Canvas As Graphics = Graphics.FromImage(DestinationBitmap) 
     Canvas.DrawImage(
      SourceBitmap, 
      DestinationRectangle, 
      SourceRectangle, 
      GraphicsUnit.Pixel) 
    End Using 
End Sub 
6

धन्यवाद @Tom Halladay

मैं अपने कोड का एक सी # संस्करण प्रदान करेंगे

private static Bitmap ConvertTiffToBitmapStream(byte[] tiffImage){ 
    System.Drawing.Image ImageBitmap = Bitmap.FromStream(new MemoryStream(tiffImage)); 
    int FrameCount = ImageBitmap.GetFrameCount(FrameDimension.Page); 
    int RunningHeight = 0; 
    int MaxWidth = 0; 

    for (int MeasurementFrameIndex = 0; MeasurementFrameIndex <= FrameCount - 1; MeasurementFrameIndex++){ 
     ImageBitmap.SelectActiveFrame(FrameDimension.Page, MeasurementFrameIndex); 
     RunningHeight += ImageBitmap.Height; 
     MaxWidth = Math.Max(MaxWidth, ImageBitmap.Width); 
    } 

    Bitmap CombinedBitmap = new Bitmap(MaxWidth, RunningHeight); 
    int RunningVerticalPosition = 0; 

    for (int CombinationFrameIndex = 0; CombinationFrameIndex <= FrameCount - 1; CombinationFrameIndex++){ 
     ImageBitmap.SelectActiveFrame(FrameDimension.Page, CombinationFrameIndex); 
     EmbedBitmap(new Bitmap(ImageBitmap), ref CombinedBitmap, RunningVerticalPosition); 
     RunningVerticalPosition += ImageBitmap.Height + 1; 
    } 
    return CombinedBitmap; 
} 

private static void EmbedBitmap(Bitmap SourceBitmap, ref Bitmap DestinationBitmap, int VerticalPosition){ 
    Rectangle SourceRectangle = new Rectangle(new Point(0, 0), new Size(SourceBitmap.Width, SourceBitmap.Height)); 
    Rectangle DestinationRectangle = new Rectangle(new Point(0, VerticalPosition), new Size(SourceBitmap.Width, SourceBitmap.Height)); 

    using (Graphics Canvas = Graphics.FromImage(DestinationBitmap)){ 
     Canvas.DrawImage(SourceBitmap, DestinationRectangle, SourceRectangle, GraphicsUnit.Pixel); 
    } 
} 

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

  • कोई संबंधित समस्या नहीं^_^