【发布时间】:2013-04-03 05:31:21
【问题描述】:
我有一张图片,我想重新调整它的大小并需要保存在我的临时文件夹中。
我尝试过的如下:
UIElement uie = CanvasHost.Child;
int width = 800;
int height = (int)((width / (double)((FrameworkElement)uie).Width) * (int)((FrameworkElement)uie).Height);
RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
rtb.Render(uie);
string dir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\temp\";
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
long size = 0;
string filePath = dir + DateTime.Now.Ticks.ToString() + (isPng ? ".png" : ".jpg");
BitmapEncoder enc = null;
using (FileStream fs = File.Create(filePath))
{
if (isPng)
enc = new PngBitmapEncoder();
else
enc = new JpegBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(rtb));
enc.Save(fs);
size = fs.Length;
}
但是当我创建这样的图像时,它会将图像的一部分保存在临时文件夹中。 (如上图所示)
如何调整全图的大小?我在这里错过了什么?
编辑: 正如 Erti-Chris Eelmaa 提到的上述答案中所述,我已将代码更改如下。它的工作原理......
UIElement uie = CanvasHost.Child;
int width = DataCache.Instance.CurrentProject.MaxPhotoEdgeSize;
int height = (int)((width / (double)((FrameworkElement)uie).Width) * (int)((FrameworkElement)uie).Height);
RenderTargetBitmap rtb = new RenderTargetBitmap((int)((FrameworkElement)uie).Width, (int)((FrameworkElement)uie).Height, 96, 96, PixelFormats.Pbgra32);
rtb.Render(uie);
ImageSource im = (ImageSource)rtb.Clone();
BitmapFrame bp = CreateResizedImage(im, width, height, 1); //method suggested by Erti-Chris Eelmaa
string dir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\temp\";
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
long size = 0;
string filePath = dir + DateTime.Now.Ticks.ToString() + (isPng ? ".png" : ".jpg");
BitmapEncoder enc = null;
using (FileStream fs = File.Create(filePath))
{
if (isPng)
enc = new PngBitmapEncoder();
else
enc = new JpegBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bp));
enc.Save(fs);
size = fs.Length;
}
【问题讨论】:
-
位图创建后需要修改高度和宽度。你在这里做的是你正在制作一个小尺寸的新位图并用原始图片填充它而不调整大小。您创建一个原始大小的位图,然后使用它的高度和宽度来改变它的大小。
-
@FaisalHafeez 你能解释更多吗?我怎样才能调整它的大小
-
这里你正在制作一个宽度和高度大小的位图。现在它的尺寸减小了。但是当你用图像填充它时,它只会复制图像的一部分(这发生在你的情况下)。您需要使用其他一些功能来实现这一点。
-
@FaisalHafeez 你能建议我在这里做什么吗?
-
试试Erti提供的方案,效果不错。
标签: c# wpf image image-resizing