我需要创建600 DPI“三重”图像,其尺寸为25.5“x11”(是Letter页面大小的三倍)。为此,我通过DrawingVisual,DrawingContext和RenderTargetBitmap类使用WPF Imaging。
当我以较低分辨率生成图像时,例如400 DPI或更低,所有文本都按预期显示在正确的位置。但是,一旦我将图像分辨率提高到500 DPI级别以上,位于图像最右侧的某些文本就会消失,而其他相对定位的文本/形状则会完美打印。关于它的最疯狂的部分是,当我尝试不同的DPI时,不同的文本将出现/消失。在一个测试用例中,600 DPI缺少一组绘制的FormattedTexts,650 DPI缺少不同的绘制的FormattedTexts集,700 DPI打印一切正常!
我使用下面的代码片段重新创建了这个问题。按原样运行(600 DPI),你得到的只是一个非常大的白色图像。将Dpi常量更改为400或更低,它可以正确打印文本。
请注意,我尝试将DrawingVisual类中的许多旋钮(例如VisualBitmapScalingMode,VisualTextRenderingMode,VisualEdgeMode等)转为无效。我对这些设置的大多数研究发现它们是纠正“模糊”文本而不是消失文本的有用设置。我也没有使用DrawingVisual或DrawingContext的任何指南/捕捉设置。
请注意,我在Win7和Win2008R2上重新创建了这个问题,我的应用程序运行的是.NET 4.5。
有什么想法吗?
const double ImageWidthInches = 25.5;
const double ImageHeightInches = 11.0;
const double Dpi = 600.0;
const double DeviceIndependentUnits = 96.0;
const double TypographicUnits = 72.0;
var visual = new DrawingVisual();
var drawing = visual.RenderOpen();
drawing.DrawRectangle(
Brushes.White,
null,
new Rect(0,
0,
ImageWidthInches*DeviceIndependentUnits,
ImageHeightInches*DeviceIndependentUnits));
var formattedText = new FormattedText(
"Why doesn't this display?",
CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
new Typeface(new FontFamily("Arial Narrow"),
FontStyles.Normal,
FontWeights.Normal,
FontStretches.Normal),
8.0*DeviceIndependentUnits/TypographicUnits,
Brushes.Black);
drawing.DrawText(formattedText,
new Point(23.39*DeviceIndependentUnits,
2.6635416666666671*DeviceIndependentUnits));
drawing.Close();
var renderTarget = new RenderTargetBitmap(
(int) (ImageWidthInches*Dpi),
(int) (ImageHeightInches*Dpi),
Dpi,
Dpi,
PixelFormats.Default);
renderTarget.Render(visual);
var tiffEncoder = new TiffBitmapEncoder {Compression = TiffCompressOption.Ccitt4};
tiffEncoder.Frames.Add(BitmapFrame.Create(renderTarget));
using (var fileStream = new FileStream(@"c:\recreateWpfTextIssue.tif", FileMode.Create, FileAccess.Write))
tiffEncoder.Save(fileStream);
答案 0 :(得分:1)
此错误的解决方法是将字体大小舍入到2个小数位:
Math.Round(8.0*DeviceIndependentUnits/TypographicUnits, 2),
可以在匹配的MSDN帖子中找到此信息和一些额外信息:http://social.msdn.microsoft.com/Forums/en-US/98717e53-89f7-4d5f-823b-7184781a7b85/wpf-formattedtext-randomly-disappears-in-high-resolution-images