对于我当前的WPF应用程序,我必须缩小一些System.Drawing.Image(从PNG文件中加载的对象,其中一些具有透明背景)。我尝试了多种方法来调整图像大小,所有这些方法在拥有较小图像方面都表现良好。但不幸的是,它们都使图像失去了透明度。
我的最后一次尝试是使用ImageResizer外部库来完成工作,因为我希望它可以轻松处理这个问题,但我仍然遇到了同样的问题:原始图像显示为透明背景;调整大小后的图像显示为黑色背景。
以下是我使用ImageResizer库的代码:
这是我另外两种方法,基本上也能产生相同的结果(图片调整大小:是;透明度保留:否):
任何关于如何在调整大小时保留透明度的想法吗?
问候,
Ralf
我的最后一次尝试是使用ImageResizer外部库来完成工作,因为我希望它可以轻松处理这个问题,但我仍然遇到了同样的问题:原始图像显示为透明背景;调整大小后的图像显示为黑色背景。
以下是我使用ImageResizer库的代码:
ImageResizer.Instructions inst = new ImageResizer.Instructions("width=" + newWidth.ToString() + ";height=" + newHeight.ToString() + ";format=png;mode=max");
ImageResizer.ImageJob job = new ImageResizer.ImageJob(originalImage, typeof(System.Drawing.Bitmap), inst);
job.Build();
return job.Result as System.Drawing.Image;
这是我另外两种方法,基本上也能产生相同的结果(图片调整大小:是;透明度保留:否):
return originalImage.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero); // Transparency gets lost
return new System.Drawing.Bitmap(originalImage, new System.Drawing.Size(newWidth, newHeight)); // Transparency gets lost
任何关于如何在调整大小时保留透明度的想法吗?
问候,
Ralf
MemoryStream
作为source
和dest
参数,以避免在最终显示图像之前使用System.Drawing.Bitmap
。不幸的是,这对我没有用,因为Result
保持为空(Null
)。我一定是错误地使用了ImageResizer。 然而,我决定尝试dbc的建议并使用BitmapImage
类。这解决了我的问题,不再需要ImageResizer。 - Ralf