我刚刚发现TIFF有几种格式。由于某些原因使用
Using bm As New Bitmap(rect.Width, rect.Width)
bm.Save("C:\testfolder\screenshot.png", Imaging.ImageFormat.Tiff)
格式变为LZW压缩,我不能在第三方库中使用。
经过一些搜索,我发现.NET确实提供了一个保存为TIFF并具有不同压缩选项的库,我想尝试全部使用它们,但是我不知道如何实现它。或者我应该说我不知道如何使用它:
目的是我想要获取区域屏幕截图并将其另存为TIFF。
Dim stream As New FileStream("new.tif", FileMode.Create)
Dim encoder As New TiffBitmapEncoder()
encoder.Compression = TiffCompressOption.Zip
encoder.Frames.Add(BitmapFrame.Create(image)) <--what is this "image"?
encoder.Save(stream)
那个image
实体是什么?流?如何将捕获的屏幕截图区域保存为TIFF?
如果
Using bm As New Bitmap(rect.Width, rect.Width)
我不介意先保存它,然后只重读bmp流。唯一的问题是我不知道示例中给出的“图像”代表什么。
我从这里阅读了一些信息,但我仍然没有弄清楚: https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.imaging.bitmapframe.create?view=netframework-4.8
请提供一个示例,如果您发现了如何使用该代码。
答案 0 :(得分:1)
您可以使用较旧的System.Drawing方式,而不是System.Windows.Media方式。
仅略微适用于Encoder.Compression Field的文档:
Imports System.Drawing.Imaging
'' .....
Private Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
Dim j As Integer
Dim encoders() As ImageCodecInfo
encoders = ImageCodecInfo.GetImageEncoders()
j = 0
While j < encoders.Length
If encoders(j).MimeType = mimeType Then
Return encoders(j)
End If
j += 1
End While
Return Nothing
End Function
Sub SaveAsTiff()
Dim sampleFile = "C:\temp\ToTiff.png"
Using bmp = Image.FromFile(sampleFile)
Dim myImageCodecInfo = GetEncoderInfo("image/tiff")
Dim myEncoder As Imaging.Encoder = Imaging.Encoder.Compression
Dim myEncoderParameters = New EncoderParameters(1)
Dim myEncoderParameter = New EncoderParameter(myEncoder, EncoderValue.CompressionNone)
myEncoderParameters.Param(0) = myEncoderParameter
bmp.Save("C:\temp\ToTiff.tif", myImageCodecInfo, myEncoderParameters)
End Using
End Sub
但是,它不允许ZIP压缩。但这对您可能并不重要:Which TIFF image compression is better, LZW or ZIP?
此外,对于屏幕截图,您可能要考虑使用PNG格式,尤其是当图像将在网络上使用时。