我有一個圖像,我想重新調整大小,需要保存在我的臨時文件夾中。在WPF中調整圖像
我曾嘗試是如下:
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;
}
但是當我這樣創建的圖像將其保存在臨時文件夾中的圖像的一部分。 (如圖所示在上述PIC)
我怎樣才能重新大小完整的圖像?我在這裏錯過了什麼?
編輯: 如通過ERTI-克里斯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你能解釋一下嗎?我如何重新調整它的大小 – DevT
這裏你正在製作一個寬度和高度尺寸的位圖。現在這個尺寸減小了。但是當你用圖像填充它時,它只會複製圖像的一部分(這是發生在你的案例中的)。你需要使用一些其他功能來實現這一點。 –