Saturday, December 8, 2007

TIFF Multipage

. Saturday, December 8, 2007

Tramite alcuni metodi della classe System.Drawing.Image è possibile estrapolare/salvare le immagini contenute in un TIFF, tale formato infatti, può essre costituito da più immagini divise su più pagine.
In Vb.Net:

   1: Private Sub SaveTIFFMultipage(ByVal imageType As String, ByVal pathImageTIFF As String)
   2:   Dim file As FileInfo = New FileInfo(pathImageTIFF)
   3:   If (file.Exists) Then
   4:     Using img As System.Drawing.Image = System.Drawing.Image.FromFile(pathImageTIFF)
   5:       'Recupero il numero di pagine che costituiscono il TIFF
   6:       Dim countPages As Integer = img.GetFrameCount( _
   7:       New System.Drawing.Imaging.FrameDimension(img.FrameDimensionsList(0)))
   8:       For i As Integer = 0 To countPages - 1
   9:         img.SelectActiveFrame(New System.Drawing.Imaging.FrameDimension( _
  10:         img.FrameDimensionsList(0)), i)
  11:         Dim imageThumb As System.Drawing.Image = img.GetThumbnailImage( _
  12:         300, 300, Nothing, Nothing)
  13:         'Salvo le immagini
  14:         imageThumb.Save(String.Format("c:\{0}.{1}", _
  15:         file.Name.Replace(file.Extension, String.Empty) + i.ToString(), imageType))
  16:       Next
  17:     End Using
  18:   End If
  19: End Sub
In C#:

private void SaveTIFFMultipage(string imageType, string pathImageTIFF)
{
FileInfo file = new FileInfo( pathImageTIFF);
if( file.Exists)
{
using( System.Drawing.Image img = System.Drawing.Image.FromFile(pathImageTIFF))
{
//Recupero il numero di pagine che costituiscono il TIFF
int countPages = img.GetFrameCount(
new System.Drawing.Imaging.FrameDimension( img.FrameDimensionsList[0]));
for( int i=0; i<countPages; i++)
{
img.SelectActiveFrame(new System.Drawing.Imaging.FrameDimension(
img.FrameDimensionsList[0]), i);
System.Drawing.Image imageThumb = img.GetThumbnailImage( 300, 300, null, IntPtr.Zero);
imageThumb.Save(string.Format(@"c:\prova\{0}.{1}", file.Name.Replace(file.Extension, string.Empty) +
i.ToString(), imageType));
}
}
}
}


I due metodi fondamentali usati allo scopo di "estrapolare" le varie immagini contenute nel TIFF sono senza ombra di dubbio GetFrameCount e SelectActiveFrame.
Tramite il primo metodo GetFrameCount sappiamo il numeto totale di frame presenti nell'immagine, mentre il metodo SelectActiveFrame seleziona e rende attivo un determinato frame all’interno dell’immagine.
Nel caso specifico utilizzo anche GetThumbnailImage per ottenere  la miniatura(300X 300) dell'immagine da salvare su disco per poi visualizzarle tramite il controllo Repeater:


<asp:Repeater ID="repImage" runat="server">
<ItemTemplate>
<asp:Image ID="img" runat="server" ImageUrl='<%#DataBinder.Eval(Container.DataItem, "src")%>'/>
</ItemTemplate>
</asp:Repeater>
 

0 commenti:

Post a Comment