C# 另存为PNG时为空文件
我有一个方法,它获取一个输入图像,对图像做一些处理,然后将其保存到另一个文件中。最基本的是,它可以调整图像的大小,但它可以做一些更复杂的事情,比如转换为灰度、量化等,但对于这个问题,我只是尝试调整图像大小,而不执行任何其他操作 它看起来像:C# 另存为PNG时为空文件,c#,asp.net,C#,Asp.net,我有一个方法,它获取一个输入图像,对图像做一些处理,然后将其保存到另一个文件中。最基本的是,它可以调整图像的大小,但它可以做一些更复杂的事情,比如转换为灰度、量化等,但对于这个问题,我只是尝试调整图像大小,而不执行任何其他操作 它看起来像: public void SaveImage(string src、string dest、int width、int height、ImageFormat格式、bool deleteOriginal、bool quantize、bool convertToG
public void SaveImage(string src、string dest、int width、int height、ImageFormat格式、bool deleteOriginal、bool quantize、bool convertToGreyscale){
//打开源文件
位图源=(位图)Image.FromFile(src);
//检查尺寸
if(source.Width
然后,为了使用它,我会调用类似这样的东西:imageService.SaveImage(“c:\image.png”,“c:\output.png”,300300,ImageFormat.png,false,false)代码>
这将打开“image.png”文件,将其大小调整为300×300,然后将其作为png文件保存到“output.png”。但是它不起作用。创建的文件位于正确的位置,但文件大小为零,并且根本不包含图像
这似乎只有在传入参数ImageFormat.Png
时才会发生;如果我通过了ImageFormat.Jpeg
,那么它可以正常工作并完美地创建图像文件
我想知道在创建映像和试图访问已创建的映像(不在上面的代码中)的代码中的其他地方之间是否会发生某种延迟,该映像会锁定文件,因此它从未写入?是这样吗
你知道还会发生什么吗
干杯
编辑:
- 移除劳埃德指出的多余铸件
将位图保存为png存在一些历史问题
使用System.Windows.Media.Imaging.PngBitmapEncoder
可以解决此问题
看
对于示例。将Save()参数与流而不是文件名一起使用将允许您确保在处理对象之前将文件刷新到磁盘
然而,我强烈建议,正如你所说。不是直接的答案,只是供参考,图形。FromImage((图像)输出)
这里的演员阵容是多余的<代码>位图
是一幅<代码>图像:)啊,是的,你说得对,不知道我为什么写这个!很高兴让我的代码简单一点,即使它仍然不能正常工作:)谢谢。这似乎就是问题所在。