我目前正在制作我的第一个WPF项目,为纸牌游戏制作卡片并将其作为PNG保存到文件夹中。现在我正在使用解释in this other answer I found的方法。这是我正在使用的代码:
private void saveCard()
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(cardArea);
double dpi = 96d;
RenderTargetBitmap rtb = new RenderTargetBitmap((int)bounds.Width, (int)bounds.Height, dpi, dpi, System.Windows.Media.PixelFormats.Default);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(cardArea);
dc.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
}
rtb.Render(dv);
BitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));
try
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
pngEncoder.Save(ms);
ms.Close();
System.IO.File.WriteAllBytes(System.AppDomain.CurrentDomain.BaseDirectory + "/Heroes/" + HeroName.Content + ".png", ms.ToArray());
}
catch (Exception err)
{
MessageBox.Show(err.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
它工作正常,但我注意到保存的图片看起来像“像素化”。与画布中的相比,甚至是屏幕截图相比,这一点尤为明显。 Here is an example.
我检查了两者的分辨率,它们具有相同的尺寸。我究竟做错了什么?我能做些什么来解决它吗?我应该将图片保存在另一种文件类型下吗?
请告诉我。