Option Strict On
Imports BitMiracle.LibTiff.Classic
Public Class Form1
Dim risoluzione_x, risoluzione_y As Int32
Dim valore_originale, valore, valore_temp As Byte 'valore del byte nel buffer nuovo file e originale
Dim BPP As Int32 'valore Bit per Pixel
Dim ripetizioni As Int32 'Numero di ripetizioni in base a quanti BPP servono
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If RadioButton3.Checked = True Then
BPP = 1
ElseIf RadioButton4.Checked = True Then
BPP = 2
ElseIf RadioButton5.Checked = True Then
BPP = 4
ElseIf RadioButton6.Checked = True Then
BPP = 8
End If
Using tif As Tiff = Tiff.Open("C:\Maschere\Convertito.tiff", "w")
Using origine As Tiff = Tiff.Open("C:\Maschere\origine.tiff", "r")
Dim larghezza_a() As FieldValue
larghezza_a = origine.GetField(TiffTag.IMAGEWIDTH)
Dim larghezza As Integer = larghezza_a(0).ToInt()
Dim altezza_a() As FieldValue
altezza_a = origine.GetField(TiffTag.IMAGELENGTH)
Dim altezza As Int32 = altezza_a(0).ToInt()
Dim bitpixel_a() As FieldValue
bitpixel_a = origine.GetField(TiffTag.BITSPERSAMPLE)
Dim bitpixel As Integer = bitpixel_a(0).ToInt()
Dim risoluzione_x_origine_a() As FieldValue
risoluzione_x_origine_a = origine.GetField(TiffTag.XRESOLUTION)
Dim risoluzione_x_origine As Integer = risoluzione_x_origine_a(0).ToInt
Dim risoluzione_y_origine_a() As FieldValue
risoluzione_y_origine_a = origine.GetField(TiffTag.YRESOLUTION)
Dim risoluzione_y_origine As Integer = risoluzione_y_origine_a(0).ToInt
Label1.Text = ("HorizontalResolution =" & risoluzione_x_origine & " DPI")
Label2.Text = ("VerticalResolution =" & risoluzione_y_origine & " DPI")
Label3.Text = ("Width px =" & larghezza)
Label4.Text = ("Height px =" & altezza)
Label5.Text = ("Bit Pixel =" & bitpixel)
If origine Is Nothing Then
MsgBox("File origine non trovato")
Return
End If
tif.SetField(TiffTag.IMAGEWIDTH, larghezza)
tif.SetField(TiffTag.IMAGELENGTH, altezza)
tif.SetField(TiffTag.BITSPERSAMPLE, BPP)
tif.SetField(TiffTag.SAMPLESPERPIXEL, 1)
tif.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISWHITE)
tif.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG)
tif.SetField(TiffTag.ROWSPERSTRIP, tif.DefaultStripSize(1))
tif.SetField(TiffTag.XRESOLUTION, risoluzione_x_origine)
tif.SetField(TiffTag.YRESOLUTION, risoluzione_y_origine)
tif.SetField(TiffTag.RESOLUTIONUNIT, ResUnit.INCH)
tif.SetField(TiffTag.STRIPOFFSETS, 0)
tif.SetField(TiffTag.STRIPBYTECOUNTS, 1)
Dim ppb As Int32 = CInt(8 / BPP) 'pixel che verranno messi in un byte
Dim indice As Int32 'indice
Dim buf_originale As Byte() = New Byte(larghezza - 1) {} 'dichiaro il buffer dal file originale
Dim buf As Byte() = New Byte(larghezza - 1) {} 'dichiaro il buffer del nuovo file
For i As Integer = 0 To altezza - 1 'scansiono l'altezza
origine.ReadScanline(buf_originale, i) 'leggo la riga "i" dal file originale
For j As Integer = 0 To larghezza - 1 Step ppb 'scansiono la larghezza a passi
For ripetizioni = 0 To ppb - 1
indice = ripetizioni + j
valore_originale = (Buffer.GetByte(buf_originale, indice)) 'leggo il singolo valore dei byte della riga "i" originale
valore_temp = (valore_originale) >> (8 - BPP) 'converto il valore letto a 8 BPP nel valore di BPP voluto
valore = valore Or (valore_temp) << (BPP * indice)
Next
Buffer.SetByte(buf, j, valore) 'scrivo il valore nel nuovo buffer
valore = 0
Next
tif.WriteScanline(buf, i) 'scrivo il buffer nel nuovo file
Next
End Using
End Using
MsgBox("File Convertito ")
End Sub
End Class