drawImage中位图的大小

时间:2017-12-07 11:31:43

标签: c# graphics bitmap

我已经问过正确缩放的问题,没有边缘在右边和底部。 link

我已经检查过,位图的大小是32 x 32像素。 当我尝试使用drawImage(Image,int,int)在pictureBox上绘制它时,它比位图的大小稍微大一点,如36乘36或40乘40。不确定。 但是当我为drawImage添加宽度和高度时,它会将它绘制为32乘32。这应该发生。

编辑:

    internal void draw(Graphics g, int x, int y)
    {
        int s = Game.scale;
        Bitmap resized = (s > 1) ? ResizeImage(image, width*s, height*s) : image;

        g.DrawImage(resized, x * width * s, y * height * s);
    }

    private static Bitmap ResizeImage(Image image, int width, int height)
    {
        var destRect = new Rectangle(0, 0, width, height);
        var destImage = new Bitmap(width, height);
        destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

        using (var graphics = Graphics.FromImage(destImage))
        {
            graphics.CompositingMode = CompositingMode.SourceCopy;
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

            using (var wrapMode = new ImageAttributes())
            {
                wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);

            }
        }

        return destImage;
    }

1 个答案:

答案 0 :(得分:1)

功能,而不是错误。如果未指定目标大小,则DrawImage()会关注图像的物理大小。它创建时的大小,以英寸为单位。您可以在调试器中看到的东西,查看位图的Horizo​​ntalResolution和VerticalResolution属性。

诊断结果可能是每英寸120点,程序员今天通常以125%的速度运行视频适配器。因此绘制的图像变为1.25 * 32 = 40像素。

请记住,这种重新缩放往往很重要,这样的图像很容易变成高档4K显示器上的灰尘斑点。它们今天变得非常实惠。您是否想要这个取决于您的其他UI重新缩放的方式。在Winforms应用中查看有关dpiAwareness的this post