在图形上绘制图块,图块之间没有空行(间隙)

时间:2013-08-29 10:38:44

标签: c# graphics bitmap system.drawing

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

当我不需要缩放Graphics时,一切都很棒。但是当我这样做时,我在瓷砖之间得到空行。

如何在Graphics上绘制瓷砖,而瓷砖之间没有间隙?

或者我还能看别的地方?也许你知道我可以用来克服这个问题的非框架类,第三方库等吗?

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

resulting image top tile bottom tile

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");
}

1 个答案:

答案 0 :(得分:0)

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

相关问题