Public Module ImageConverter
Public Sub Main()
Dim Dir As New DirectoryInfo(Directory.GetCurrentDirectory())
Console.WriteLine(“Processing images in “ & Dir.FullName)
' Recupera tutti i file bitmap in questa directory.
Dim File As FileInfo
For Each File In Dir.GetFiles(“*.bmp”)
Console.WriteLine(“Converting: “ & File.Name)
’ Carica l’immagine in memoria.
Dim Image As Image = Image.FromFile(File.FullName)
’ Crea un nuovo nome di file.
Dim JpgName As String
JpgName = Path.GetFileNameWithoutExtension(File.FullName) & “.jpg”
’ Salva il file come JPEG.
Image.Save(JpgName, ImageFormat.Jpeg)
Console.WriteLine(“Saved: “ & JpgName)
Console.WriteLine()
Next
Console.ReadLine()
End Sub
End Module
Non solo si possono convertire i tipi di file di immagine, si possono anche
specificare parametri addizionali che influenzano come i dati di immagine sono
elaborati. Per esempio, si può cambiare la compressione di un file TIFF alla
qualità di un file JPEG. Si può farlo usando oggetti Encoder, che devono essere
passati a una versione in overload del metodo Image.Save. Molti utili oggetti
Encoder possono essere ottenuti dalle proprietà shared della classe
System.Drawing.Imaging.Encoder. Queste proprietà includono ChrominanceTable,
ColorDepth, Compression, LuminanceTable, Quality, RenderMethod, SaveFlag,
ScanMethod, Transformation e Version.
Ulteriori informazioni sono disponibili sulla guida MSDN. Inoltre, l’esempio
seguente mostra come si può utilizzare un oggetto Encoder per salvare file
JPEG con differenti parametri di qualità.
Public Module ImageConverter
Public Sub Main()
’ Ottiene un oggetto ImageCodecInfo che rappresenta il codec JPEG.
’ Viene ottenuto cercando il corrispondente tipo MIME.
Dim CodecInfo As ImageCodecInfo = GetEncoderInfo(“image/jpeg”)
’ Crea un oggetto Encoder basato sul parametro Quality.
Dim Enc As Encoder = Encoder.Quality
’ Crea l’array che conterrà i parametri di codifica.
’ In questo caso, conterrà solo il parametro qualità.
Dim EncParams As New EncoderParameters(1)
Dim Dir As New DirectoryInfo(Directory.GetCurrentDirectory())
Console.WriteLine(“Processing images in “ & Dir.FullName)
’ Recupera tutti i file bitmap nella directory corrente.
Dim File As FileInfo
For Each File In Dir.GetFiles(“*.bmp”)
Console.WriteLine(“Converting: “ & File.Name)
’ Carica l’immagine in memoria.
Dim Image As Image = Image.FromFile(File.FullName)
’ Crea un nuovo nome di file.
Dim JpgName As String
’ Salva la bitmap come file JPEG con un livello di qualità 25.
EncParams.Param(0) = New EncoderParameter(Enc, 25L)
JpgName = Path.GetFileNameWithoutExtension(File.FullName) & _
“25” & “.jpg”
Image.Save(JpgName, CodecInfo, EncParams)
Console.WriteLine(“Saved: “ & JpgName)
’ Salva la bitmap come file JPEG con un livello di qualità 50.
EncParams.Param(0) = New EncoderParameter(Enc, 50L)
JpgName = Path.GetFileNameWithoutExtension(File.FullName) & _
“50” & “.jpg”
Image.Save(JpgName, CodecInfo, EncParams)
Console.WriteLine(“Saved: “ & JpgName)
’ Salva la bitmap come file JPEG con un livello di qualità 75.
EncParams.Param(0) = New EncoderParameter(Enc, 75L)
JpgName = Path.GetFileNameWithoutExtension(File.FullName) & _
“75” & “.jpg”
Image.Save(JpgName, CodecInfo, EncParams)
Console.WriteLine(“Saved: “ & JpgName)
Console.WriteLine()
Next
Console.ReadLine()
End Sub
Private Function GetEncoderInfo(ByVal mimeType As String) _
As ImageCodecInfo
Dim i As Integer
Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders()
For i = 0 To Encoders.Length - 1
If Encoders(i).MimeType = mimeType Then
Return Encoders(i)
End If
Next
Return Nothing
End Function
End Module
L’output di questa applicazione console apparirà così:
Processing images in C:\Temp\Recipe 12-11\bin
Converting: test.bmp
Saved: test25.jpg
Saved: test50.jpg
Saved: test75.jpg