我已经问过正确缩放的问题,没有边缘在右边和底部。 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;
}
答案 0 :(得分:1)
功能,而不是错误。如果未指定目标大小,则DrawImage()会关注图像的物理大小。它创建时的大小,以英寸为单位。您可以在调试器中看到的东西,查看位图的HorizontalResolution和VerticalResolution属性。
诊断结果可能是每英寸120点,程序员今天通常以125%的速度运行视频适配器。因此绘制的图像变为1.25 * 32 = 40像素。
请记住,这种重新缩放往往很重要,这样的图像很容易变成高档4K显示器上的灰尘斑点。它们今天变得非常实惠。您是否想要这个取决于您的其他UI重新缩放的方式。在Winforms应用中查看有关dpiAwareness的this post。