以 Tiff 格式保存图片而不压缩

我刚刚发现 TIFF 有多种格式。由于某种原因,使用时


Using bm As New Bitmap(rect.Width, rect.Width)

bm.Save("C:\testfolder\screenshot.png", Imaging.ImageFormat.Tiff)

格式变为 LZW 压缩格式,我不能在第三方库中使用它。


经过一些搜索,我发现.NET 确实提供了一个库来保存为具有不同压缩选项的 TIFF,我想尝试所有这些但我不知道如何实现它。或者我应该说我不知道如何使用它:


https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.imaging.tiffcompressoption?view=netframework-4.8#examples


目的是我想获取区域截图并将其保存为 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 ://learn.microsoft.com/en-us/dotnet/api/system.windows.media.imaging.bitmapframe.create?view=netframework- 4.8


如果你弄明白了,请给我一个如何使用代码的例子。


繁花如伊
浏览 212回答 1
1回答

紫衣仙女

您可以使用旧的 System.Drawing 方式而不是 System.Windows.Media 方式。仅从Encoder.Compression Field的文档中略微改编:Imports System.Drawing.Imaging'' .....Private Shared Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo&nbsp; &nbsp; Dim j As Integer&nbsp; &nbsp; Dim encoders() As ImageCodecInfo&nbsp; &nbsp; encoders = ImageCodecInfo.GetImageEncoders()&nbsp; &nbsp; j = 0&nbsp; &nbsp; While j < encoders.Length&nbsp; &nbsp; &nbsp; &nbsp; If encoders(j).MimeType = mimeType Then&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Return encoders(j)&nbsp; &nbsp; &nbsp; &nbsp; End If&nbsp; &nbsp; &nbsp; &nbsp; j += 1&nbsp; &nbsp; End While&nbsp; &nbsp; Return NothingEnd FunctionSub SaveAsTiff()&nbsp; &nbsp; Dim sampleFile = "C:\temp\ToTiff.png"&nbsp; &nbsp; Using bmp = Image.FromFile(sampleFile)&nbsp; &nbsp; &nbsp; &nbsp; Dim myImageCodecInfo = GetEncoderInfo("image/tiff")&nbsp; &nbsp; &nbsp; &nbsp; Dim myEncoder As Imaging.Encoder = Imaging.Encoder.Compression&nbsp; &nbsp; &nbsp; &nbsp; Dim myEncoderParameters = New EncoderParameters(1)&nbsp; &nbsp; &nbsp; &nbsp; Dim myEncoderParameter = New EncoderParameter(myEncoder, EncoderValue.CompressionNone)&nbsp; &nbsp; &nbsp; &nbsp; myEncoderParameters.Param(0) = myEncoderParameter&nbsp; &nbsp; &nbsp; &nbsp; bmp.Save("C:\temp\ToTiff.tif", myImageCodecInfo, myEncoderParameters)&nbsp; &nbsp; End UsingEnd Sub但是,它不允许 ZIP 压缩。但这对您来说可能无关紧要:哪种 TIFF 图像压缩更好,LZW 还是 ZIP?此外,对于屏幕截图,您可能需要考虑使用 PNG 格式,尤其是当图像将在网络上使用时。
打开App,查看更多内容
随时随地看视频慕课网APP