, Другие режимы интерполяции не делают. Я думаю, что никогда этого не замечал.

я рисую изображение с помощьюGraphics.DrawImage и нарисуйте его в большем размере, чем исходное изображение, в итоге получится слишком маленьким. Вы можете увидеть это на следующем рисунке:

Зеленые линии не должны быть видны и не являются частью изображения. Скорее они нарисованы позади изображения, и изображение должно покрыть их.

Как я могу нарисовать изображение с точным правильным размером?

РЕДАКТИРОВАТЬ: Я рисую зеленую часть с тем же прямоугольником, который я передаю в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();
}

РЕДАКТИРОВАТЬ 4: Также обратите внимание, что изображение кажется обрезанным слева и сверху вместо изменения размера. Взгляните на это сравнение исходного изображения, масштабированного в Photoshop, а затем на то, как GDI + отображает его:

Ответы на вопрос(1)

Ваш ответ на вопрос