Когда я рисую изображение, используя Graphics.DrawImage
, и рисую его больше, чем исходное изображение, оно оказывается слишком маленьким.Это можно видеть на следующем рисунке:
![enter image description here](https://i.stack.imgur.com/stSNg.png)
Зеленые линии не должны быть видны и не являются частью изображения.Скорее они рисуются позади изображения, и изображение должно покрывать их.
Как я могу нарисовать изображение с точным правильным размером?
РЕДАКТИРОВАТЬ : я рисую зеленыйчасть с таким же прямоугольником я передаю в вызов DrawImage
, с точными размерами того, насколько большим должно быть изображение.Так что в моих значениях нет недостатка (я думаю).
РЕДАКТИРОВАТЬ 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();
}
EDIT 4 : Также обратите внимание, что изображение кажется обрезанным слева и сверху вместо изменения размера.Взгляните на это сравнение исходного изображения, масштабированного в Photoshop, и узнайте, как GDI + его отображает: ![enter image description here](https://i.stack.imgur.com/yHAql.png)