我有这个代码:
public void rotateRocketImage()
{
Bitmap b = this.rocketImgOriginal;
//create a new empty bitmap to hold rotated image
Bitmap tempBitmap = new Bitmap(97,97);
//make a graphics object from the empty bitmap
Graphics g = Graphics.FromImage(tempBitmap);
//move rotation point to center of image
//g.TranslateTransform(48, 48);
//rotate
//g.RotateTransform(this.orient);
//move image back
//g.TranslateTransform(-48, -48);
//draw passed in image onto graphics object
g.DrawImage(b,0,0);
this.rocketImg = tempBitmap;
}
哪个( RotateTransform 当前禁用)应该只是使 this.rocketImg 等于 this.rocketImg ,但不知何故它几乎将图片放大了两倍......任何可能导致它的想法?
谢谢!
编辑:
这是绘图代码:
private void timer1_Tick(object sender, EventArgs e)
{
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
var tempRocket = new Bitmap( rocket.rocketImg );
using (var g = Graphics.FromImage(tempRocket))
{
e.Graphics.DrawImage(tempRocket, 150, 150);
}
}
最佳答案
位图图像中有一个分辨率参数。
如果您的位图具有不同的分辨率,则在另一幅图像上绘制图像时会收到变形。
请参阅 HorizontalResolution
和 VerticalResolution
属性以及 SetResolution
实例的 Bitmap
方法。
代码示例显示了它是如何工作的:
int magnificationIndex = 2;
Bitmap tempRocket = new Bitmap("ccc.bmp");
Bitmap tempBitmap = new Bitmap(97, 97);
tempBitmap.SetResolution(tempRocket.HorizontalResolution * magnificationIndex,
tempRocket.VerticalResolution * magnificationIndex);
using (Graphics g = Graphics.FromImage(tempBitmap))
{
g.FillRectangle(Brushes.White, 0, 0, 97, 97);
g.DrawImage(tempRocket,0,0);
}
tempBitmap.Save("result.bmp");
关于C#,Bitmap 变大了两倍,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5181664/