Chr*_*ris 4 .net c# graphics compact-framework
我有一些使用Bitmap该类创建图形的代码.然而,生成的位图的质量非常差,我怎样才能提高质量呢?请注意,我正在使用Compact Framework!
以下是我如何做各种事情的几个片段:
使用基于现有jpg的背景创建位图
Bitmap bitmap = new Bitmap(filename);
Run Code Online (Sandbox Code Playgroud)
然后我Graphics从位图创建一个类
Graphics myG = Graphics.FromImage(bitmap);
Run Code Online (Sandbox Code Playgroud)
然后我像这样绘制图形:
myG.DrawLine(majorAxisPen, graphRect.Left, graphRect.Bottom, graphRect.Right, graphRect.Bottom);
Run Code Online (Sandbox Code Playgroud)
在绘制了我需要的所有内容后,我将其保存为Bitmap:
bitmap.Save(fileDestination, System.Drawing.Imaging.ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)
这是它产生的图像

您可能会遇到两种"低质量"的来源.
每个Graphics对象都有许多属性,用于控制可以对对象执行的操作的"质量".特别是,你应该设置SmoothingMode,以HighQuality避免对线图的锯齿. .NET Compact Framework中不支持.
为了避免压缩失真,您可以通过手动控制压缩而不是使用(低质量)默认值来控制jpeg压缩参数ImageFormat.Jpeg- 遗憾的是,如果不依靠手动P/Invoking或第三方库,就无法在CF上执行此操作.有关完整.NET Framework的更广泛的代码示例,请参阅我写给类似问题的答案:如何将HttpPostedFileBase转换为图像?.
一个简单的替代方法是使用PNG,一种无损图像格式,每次保存时都不会降低质量 - 考虑到您发布的示例的简单几何形状,这甚至不会花费任何文件大小.使用其他格式可能是您唯一的选择; Compact Framework中无法自定义jpeg编码器参数,因为ImageCodecInfo它不可用.如果您确实需要Jpeg,可以尝试直接使用外部库(例如http://www.opennetcf.com/library/sdf/)或P/Invoke本机方法来访问特定于平台的编码器.
一些可能的抗锯齿方法: