您好,我正在使用PngBitmapEncoder从画布中创建内存中的图像。
public void CaptureGraphic()
{
Canvas canvas = new Canvas();
canvas.SnapsToDevicePixels = true;
canvas.Height = IMAGEHEIGHT;
canvas.Width = IMAGEWIDTH;
Draw(canvas);
canvas.Arrange(new Rect(0, 0, IMAGEWIDTH, IMAGEHEIGHT));
member.MemberImage = GetPngFromUIElement(canvas);
}
public static System.Drawing.Image GetPngFromUIElement(Canvas source)
{
int width = (int)source.ActualWidth;
int height = (int)source.ActualHeight;
if (width == 0)
width = (int)source.Width;
if (height == 0)
height = (int)source.Height;
RenderTargetBitmap bitmap = new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Pbgra32);
bitmap.Render(source);
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Interlace = PngInterlaceOption.Off;
enc.Frames.Add(BitmapFrame.Create(bitmap));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
enc.Save(ms);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
ms.Flush();
ms.Dispose();
return image;
}然后使用GDI+ DrawImage()方法将图像发送到打印机。然而,打印的结果是模糊的。
我已经尝试将原始画布大小与打印大小相匹配,以避免任何缩放,同样,我也尝试使原始画布大得多,以便缩放后的图像保持质量,而最终打印的图像总是模糊的。
有人能提供任何建议/替代方案吗?我已经设置了相当多的GDI+打印例程,现在还不能选择转移到wpf文档。
谢谢
发布于 2011-07-03 14:09:16
您正在以96 DPI捕获位图。不要在RenderTargetBitmap的构造函数中使用96,而是尝试匹配打印机输出的DPI。或者,您可以计算并计算宽度/高度的差异,并相应地重新缩放报表上的图像(结果是报表上的图像将看起来更小)。
发布于 2020-03-12 04:19:39
我得到了同样模糊的结果,并提出了以下代码,它对offset应用了相同的概念,但在DrawingVisual上使用了Offset属性(因为我使用的是DrawDrawing,它没有使用offset参数的重载):
public static Image ToBitmap(Image source)
{
var dv = new DrawingVisual();
// Blur workaround
dv.Offset = new Vector(0.5, 0.5);
using (var dc = dv.RenderOpen())
dc.DrawDrawing(((DrawingImage)source.Source).Drawing);
var bmp = new RenderTargetBitmap((int)source.Width, (int)source.Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(dv);
var bitMapImage = new Image();
bitMapImage.Source = bmp;
bitMapImage.Width = source.Width;
bitMapImage.Height = source.Height;
return bitMapImage;
}发布于 2011-07-03 16:10:58
我想我已经找到答案了。
http://www.charlespetzold.com/blog/2007/12/High-Resolution-Printing-of-WPF-3D-Visuals.html
我只需要将图像大小和dpi一起放大,文件大小就大大增加了!
https://stackoverflow.com/questions/6558457
复制相似问题