変換行列を使用して回転した48x48の画像があります。
何らかの理由で、このスクリーンショットからわかるように、デザイン時の回転画像は実行時の回転画像とは異なります(リンクが切れています)(左側がデザイン時、右側が実行時):
見つけるのは少し難しいかもしれませんが、青い円の右端をよく見ると、右側の画像では約1ピクセル広くなっています。画像がレイヤー化されていることに注意してください。前景の白い輝きは回転している部分ですが、背景の青いボールは静止しています。
正確に90度(スクリーンショットのように)、180度、おそらく270度回転すると、実行時に画像が1ピクセルオフセットされているように見えます。私が見る限り、画像は他の回転角と同じように見えます。
スニペットは次のとおりです。
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)
}
誰かがこの行動の理由を説明できますか?または、さらに良いことに、実行時の結果を設計時の結果のように見せるためのソリューションはありますか?
この画像は、単一の画像に基づいてコードから生成され、小さなステップで回転するアニメーションの一部であるため、私にとって重要です。デザイン時に、アニメーションはスムーズで見栄えがします。実行時に、それは飛び回っているように見えます:/
Windows VistaBusinessSP2でVisualStudio2005を使用しています。