我正在尝试将 Png 或 Jpg 文件转换为 Tiff 格式。这是我的代码:
' If png or jpeg, then convert to Tiff
If aFName.ToUpper.EndsWith(".PNG") OrElse aFName.ToUpper.EndsWith(".JPG") OrElse aFName.ToUpper.EndsWith(".JPEG") Then
Try
lTiffMS = New MemoryStream
System.Drawing.Image.FromStream(lMS).Save(lTiffMS, System.Drawing.Imaging.ImageFormat.Tiff)
lTiffMS.CopyTo(lMS)
aFName = Path.GetFileNameWithoutExtension(aFName) + ".tiff"
Catch ex As Exception
Common.LogMessage("SAPInterface.GetBase64-Tiff", ex.ToString)
Return Nothing
End Try
End If
Return Convert.ToBase64String(lMS.ToArray())
原始图像在
lMS
中。我将其保存到 lTiff
,然后将其复制回 lMS
(因为我需要将其放在那里)
问题在于
lMS
流仍然包含原始文件而不是预期的 Tiff 图像。我不太擅长内存流。这是正确的转换方法吗?
流有一个指针,指示下一次读取或写入将在哪里执行。当您读取或写入时,该指针会前进。当您调用
Image.FromStream
时,您会读取整个流,因此将指针前进到流的末尾。如果您希望覆盖流的内容,则需要将该指针重置为流的开头。您可以通过设置 Position
属性或调用 Seek
方法来做到这一点。这是假设 CanSeek
属性是 True
,这将是 MemoryStream
。