gpt4 book ai didi

c# - DrawImage 调整后的图像太小

转载 作者:行者123 更新时间:2023-11-30 14:22:18 28 4
gpt4 key购买 nike

当我使用 Graphics.DrawImage 绘制图像并以比原始图像更大的尺寸绘制时,它最终变得有点太小了。您可以在下图中看到这一点:
enter image description here

绿线不应该是可见的,也不是图像的一部分。相反,它们被绘制在图像后面,图像应该覆盖它们。

如何绘制尺寸完全正确的图像?

编辑:我使用传递给 DrawImage 调用的相同矩形绘制绿色部分,并使用图像应该有多大的确切尺寸。所以我的值(value)观没有缺陷(我认为)。

编辑 2:我使用 FillRectangle 绘制绿色矩形,因此不需要进行笔计算。此外,我记录了传递到矩形中的图像和绿色填充值,这些值是正确的。这只是关闭的图像。我稍后会发布代码,因为我现在不在电脑前。

编辑 3:这是我用来渲染图像的代码:

// This is for zooming
public readonly float[] SCALES = { 0.05f, 0.1f, 0.125f, 0.25f, 0.333f, 0.5f, 0.667f, 0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f, 2.5f, 3.0f, 3.5f, 4.0f, 4.5f, 5.0f, 6.0f, 7.0f, 8.0f, 10.0f, 12.0f, 15.0f, 20.0f, 30.0f, 36.0f };
private int scaleIndex = 8;

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

float ScaleFactor = SCALES[scaleIndex];

e.Graphics.InterpolationMode = ScaleFactor < 1 ? InterpolationMode.Bicubic : InterpolationMode.NearestNeighbor;

Image im = Properties.Resources.TSprite0;

for (int y = 0; y < TilesVertical; y++)
{
for (int x = 0; x < TilesHorizontal; x++)
{
float sx = im.Width * ScaleFactor;
float sy = im.Height * ScaleFactor;
Point p = new Point((int)(-scrollPosition.X + sx * x), (int)(-scrollPosition.Y + sy * y));
Size s = new Size((int)Math.Floor(sx), (int)Math.Floor(sy));

// The green rectangle in the background should be the same size as the image
e.Graphics.FillRectangle(Brushes.Lime, new Rectangle(p, s));
e.Graphics.DrawImage(im, new Rectangle(p, s), 0, 0, 16, 16, GraphicsUnit.Pixel);
}
}

im.Dispose();
}

编辑 4:另请注意,图像似乎在左侧和顶部被裁剪,而不是调整大小。看一下在 Photoshop 中放大的原始图像与 GDI+ 如何渲染它的比较: enter image description here

最佳答案

当缩放到 2 倍或更大时会出现此问题。

看起来整个问题都是由错误的默认值引起的PixelOffsetMode .

By offsetting pixels during rendering, you can improve render quality at the cost of render speed.

将其设置为

g.PixelOffsetMode = PixelOffsetMode.Half;

让它为我消失。

将其设置为

g.PixelOffsetMode = PixelOffsetMode.HighQuality;

也可以正常工作。

DefaultNoneHighSpeed 会导致图像向左上方稍微渲染。

通常您还需要设置 InterpolationMode.NearestNeighbor

关于c# - DrawImage 调整后的图像太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50419325/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com