Create, Save Tiff Image & Extract Images From TIFF Image
Friend Sub ImagesToTiff(fileName As
String, images As Image(), isMultiIFrame As Boolean) ' Define an EncoderParameters array Dim encoderParams As New
EncoderParameters(1) ' Define ImageCodecInfo to retrieve
information about image encoders and decoder Dim encoderInfo As ImageCodecInfo =
ImageCodecInfo.GetImageEncoders().First(Function(ie) ie.MimeType =
"image/tiff") ' define tiff image Dim tiff As Image = CType(Nothing, Image) ' define the top bitmap Dim masterBitmap As Bitmap = CType(Nothing,
Image) If isMultiIFrame Then Dim i As Integer = 0 While i < images.Length If i = 0 Then '
save the top bitmap/frame
Dim firstStream As New IO.MemoryStream
masterBitmap = images(i)
masterBitmap.Save(firstStream, ImageFormat.Tiff)
tiff = Image.FromStream(firstStream)
encoderParams.Param(0) = New EncoderParameter(Encoder.SaveFlag,
CType(EncoderValue.MultiFrame, EncoderParameterValueType))
tiff.Save(fileName, encoderInfo, encoderParams) Else
encoderParams.Param(0) = New EncoderParameter(Encoder.SaveFlag,
CType(EncoderValue.FrameDimensionPage, EncoderParameterValueType))
Dim secondStream As New IO.MemoryStream
Dim img As Image = CType(images(i), Image)
img.Save(secondStream, ImageFormat.Tiff) '
add and save more frames to the file or stream specified in a previous call
to the Save method.
Using frame As Image = Image.FromStream(secondStream)
tiff.SaveAdd(frame, encoderParams)
End Using End If If i =
images.Length - 1 Then
encoderParams.Param(0) = New EncoderParameter(Encoder.SaveFlag,
CType(EncoderValue.Flush, EncoderParameterValueType))
tiff.SaveAdd(encoderParams) End If i += 1 End While Else Dim j As Integer = 0 While j < images.Length Dim thirdStream
As New IO.MemoryStream Dim img As Image
= CType(images(j), Image)
img.Save(thirdStream, ImageFormat.Tiff) Using frame As
Image = Image.FromStream(thirdStream)
frame.Save(fileName, ImageFormat.Tiff) End Using j += 1 End While End If End Sub |
Friend Sub TiffToImages(fileName As
String) If
IsMultFrameImage(Image.FromFile(fileName)) Then Using ImageFile As Image =
Image.FromFile(fileName).Clone Dim
frameDimensions As New FrameDimension(ImageFile.FrameDimensionsList(0)) Dim count As
Integer = ImageFile.GetFrameCount(frameDimensions) Dim names As
String() = New String(count) {} Dim frame As
Integer = 0 While frame
< count
ImageFile.SelectActiveFrame(frameDimensions, frame)
Using bmp As New Bitmap(ImageFile)
names(frame) = String.Format("{0}\{1}{2}.jpeg",
IO.Path.GetDirectoryName(fileName),
IO.Path.GetFileNameWithoutExtension(fileName), frame)
bmp.Save(names(frame), ImageFormat.Jpeg)
End Using
frame += 1 End While End Using End If End Sub |
Friend Function
IsMultFrameImage(img As Image) As Boolean Return img IsNot Nothing AndAlso
img.RawFormat.Guid = ImageFormat.Tiff.Guid AndAlso ((img.GetFrameCount(New FrameDimension(img.FrameDimensionsList(0))))
> 1) End Function |
Usage of the Code:
Dim images As Image() = New Image()
{My.Resources.tmp_0.Clone(), My.Resources.tmp_1.Clone(), My.Resources.tmp_2,
My.Resources.tmp_3.Clone()} Dim fileName As String =
".\egyptFlag.tiff" ImagesToTiff(fileName, images, True) TiffToImages(fileName) |
Comments
Post a Comment