我正在使用WPF,.NET 3.5,C#。我在从数据库加载的内存中有jpeg文件字节数组,我想在内存中调整它的大小。
请帮我这样做。
答案 0 :(得分:0)
快速谷歌搜索产生MSDN article说明如何执行此操作。
一个简单的例子:
System.Drawing.Image source = System.Drawing.Image.FromFile(@"Z:\Temp\temp.bmp");
System.Drawing.Image destination = new System.Drawing.Bitmap(128, 128);
using (var g = Graphics.FromImage(destination))
{
g.InterpolationMode = InterpolationMode.HighQualityBilinear;
g.DrawImage(source, new System.Drawing.Rectangle(0,0,128,128), new System.Drawing.Rectangle(0, 0,source.Width, source.Height), GraphicsUnit.Pixel);
}
destination.Save(@"Z:\Temp\outpt.png", ImageFormat.Png);
注意我的示例使用文件,但这只是用于加载和保存。所有工作都在内存中完成,如果更适合您的工作流程,您可以从内存流中加载和保存。
答案 1 :(得分:0)
您也可以使用此功能:
public static BitmapImage BitmapImageFromBitmapSourceResized(BitmapSource bitmapSource, int newWidth)
{
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
MemoryStream memoryStream = new MemoryStream();
BitmapImage bImg = new BitmapImage();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(memoryStream);
bImg.BeginInit();
bImg.StreamSource = new MemoryStream(memoryStream.ToArray());
bImg.DecodePixelWidth = newWidth;
bImg.EndInit();
memoryStream.Close();
return bImg;
}
microsoft建议使用此功能,因为图像不是以原始大小保存,而是以 newWidth 的大小保存。如果用户输入巨大的图像,它可以避免内存溢出。