我目前正在尝试从多个渲染图像中编译一个小图像。 其中一个图像是生成的QR码,它可以很好地显示最终结果。 其他图像是从矢量图像渲染的,C#要求我将它们渲染成Bitmap对象。这个过程本身就很好,如果我导出这些图像,它们就是应该的。
问题是,如果我想将这些位图添加到另一个位图(我需要旋转它们),它们会变得模糊。它们确实需要调整大小以适应所以这也可能是一个问题。
这是QR码的渲染
QrEncoder encoder = new QrEncoder();
QrCode qrCode;
GraphicsRenderer gRenderer = new GraphicsRenderer(
new FixedCodeSize(330, QuietZoneModules.Two),
Brushes.Black, Brushes.White);
ms = new MemoryStream();
encoder.ErrorCorrectionLevel = ErrorCorrectionLevel.H;
encoder.TryEncode(id + ":" + i, out qrCode);
gRenderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms);
Image bmp = Image.FromStream(ms);
Bitmap newBmp = new Bitmap(bmp.Width + 160, bmp.Height + 160);
这是矢量图像的渲染:
SvgDocument svgDoc2 = SvgDocument.Open(Application.StartupPath + @"\resources\logo2.svg");
svgDoc2.Width = new SvgUnit(svgDoc2.Width.Type, svgDoc2.Width * 2);
svgDoc2.Height = new SvgUnit(svgDoc2.Height.Type, svgDoc2.Height * 2);
//svgDoc2.Transforms = new SvgTransformCollection();
//svgDoc2.Transforms.Add(new SvgScale(2, 2));
Bitmap logo2 = new Bitmap((int)svgDoc2.Width.Value, (int)svgDoc2.Height.Value);
svgDoc2.Draw(logo2);
这是徽标的图纸
using (Graphics g = Graphics.FromImage(newBmp))
{
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.None;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
g.Clear(Color.White);
g.DrawImage(bmp, 80, 80);
g.TranslateTransform(newBmp.Width / 2, newBmp.Height / 2);
g.DrawImage(logo, -(logo.Width / 2) + 64, newBmp.Height / 2 - 80, 284, 78);
g.RotateTransform(90);
g.DrawImage(logo2, -(logo2.Width / 2) + 64, newBmp.Width / 2 - 80, 284, 76);
g.RotateTransform(90);
g.DrawImage(logo, -(logo.Width / 2) + 64, newBmp.Height / 2 - 80, 284, 78);
g.RotateTransform(90);
g.DrawImage(logo2, -(logo2.Width / 2) + 64, newBmp.Width / 2 - 80, 284, 76);
g.RotateTransform(90);
请注意,我曾尝试使用像素偏移,插值和平滑模式,但无论这些组合如何,我都无法获得完美的结果。
有没有人知道渲染它的正确方法,并因此得到像素完美的图像。