У меня есть изображение 48x48, которое поворачивается с использованием матрицы преобразования.
По некоторым причинам повернутое изображение во время разработки отличается от повернутого изображения во время выполнения, как вы можете видеть из этого снимка экрана (ссылка не работает) (время разработки слева, время выполнения справа):
Это может быть немного трудно определить, но если вы внимательно посмотрите на правый край синего круга, он будет примерно на пиксель шире на изображении справа. Обратите внимание, что изображение является многослойным - белое свечение на переднем плане - это та часть, которая вращается, а синий шар на заднем плане неподвижен.
Кажется, что изображение смещено на 1 пиксель во время выполнения при повороте точно на 90 градусов (как на скриншоте), на 180 градусов и, вероятно, также на 270 градусов. Насколько я вижу, изображение выглядит одинаково с любым другим углом поворота.
Вот фрагмент:
protected static Image RotateImage(Image pImage, Single pAngle)
{
Matrix lMatrix = new Matrix();
lMatrix.RotateAt(pAngle, new PointF(pImage.Width / 2, pImage.Height / 2));
Bitmap lNewBitmap = new Bitmap(pImage.Width, pImage.Height);
lNewBitmap.SetResolution(pImage.HorizontalResolution, pImage.VerticalResolution);
Graphics lGraphics = Graphics.FromImage(lNewBitmap);
lGraphics.Transform = lMatrix;
lGraphics.DrawImage(pImage, 0, 0);
lGraphics.Dispose();
lMatrix.Dispose();
return lNewBitmap;
}
void SomeMethod()
{
// Same results in design-time and run-time:
PictureBox1.Image = RotateImage(PictureBox2.Image, 18)
// Different results in design-time and run-time.
PictureBox1.Image = RotateImage(PictureBox2.Image, 90)
}
Может кто-нибудь объяснить причину такого поведения? Или, что еще лучше, решение, позволяющее сделать результаты во время выполнения похожими на результаты во время разработки?
Это важно для меня, потому что это изображение является частью анимации, которая генерируется из кода на основе одного изображения, которое затем вращается небольшими шагами. Во время разработки анимация выглядит плавно и красиво. Во время выполнения похоже, что он прыгает вокруг: /
Я использую Visual Studio 2005 в Windows Vista Business SP2.