0

我正在尝试绘制一个大图像,表示为System.Drawing.Graphics表面上的一组瓷砖。

当我不需要扩展Graphics. 但是当我这样做时,我会在瓷砖之间得到空行。

如何Graphics在瓷砖之间没有间隙的情况下绘制瓷砖?

还是我应该去别的地方看看?也许您知道我可以用来解决问题的非框架类、第 3 方库等?

下面是两个示例图块,图像,显示问题和重现问题的代码。

结果图像 顶部瓷砖 底瓦

float scale = 1.66f;
int width = (int)(128 * scale);
int height = (int)(256 * scale);
using (Bitmap result = new Bitmap(width, height))
{
    using (Graphics graphics = Graphics.FromImage(result))
    {
        graphics.ScaleTransform(scale, scale);

        // tried lines below, DOES NOT always help
        //graphics.SmoothingMode = SmoothingMode.HighQuality;
        //graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        //graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
        //graphics.CompositingQuality = CompositingQuality.HighQuality;

        int top;
        using (Image bitmap = Image.FromFile("topTile.png"))
        {
            graphics.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
            top = bitmap.Height;
        }

        using (Image bitmap = Image.FromFile("bottomTile.png"))
            graphics.DrawImage(bitmap, 0, top, bitmap.Width, bitmap.Height);
    }

    result.Save("result.png");
}
4

1 回答 1

0

我注意到您通过将比例因子乘以初始宽度和高度然后四舍五入(或可能截断)到最接近的整数来创建具有整数宽度和高度的位图。但是,您随后通过浮点缩放量进行缩放转换,因此缩放量与实际位图宽度和高度不完全匹配。也许调整调用中使用的比例量ScaleTransformation()可以解决问题?

于 2013-09-04T05:10:52.777 回答