, Другие режимы интерполяции не делают. Я думаю, что никогда этого не замечал.
я рисую изображение с помощью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 + отображает его: