C#,位图变大两倍,为什么?

C#,位图变大两倍,为什么?,c#,C#,我有这个密码: 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

我有这个密码:

    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);
        }

    }

可能是您正在将其绘制到的控件的
SizeMode
设置为
Zoom

位图图像中有一个分辨率参数

如果位图的分辨率不同,则在绘制一幅图像时会收到变形

请参见
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");

我认为您应该检查rocketImg控件的属性。确保它不会拉伸、调整大小。

在我看来,问题在于构造函数。 这是指向MSDN中类定义的链接: 您应该指定图形对象或手动设置分辨率


或者,您可以在构造函数中指定原始图像,新对象将保留其属性。

正如您所说,图像的原始大小为97 X 97,但您使用150 X 150绘制图像,这使图像变大。

图像的原始大小是多少?不知道您的实际问题,但您的代码在处理方面相当懒惰。似乎找不到它。应该在哪里?@Rob,我在回答中添加了详细信息。@Rob,你应该为两个位图设置相同的分辨率!刚刚添加了“tempBitmap.SetResolution(72,72);”就可以了!但奇怪的是,没有它,它自己改变了分辨率。不,我把它画在一个表格上,似乎没有“缩放”功能。不,这个150x150在它画的地方是协调的。我试着换了,同样大小,只是换了个地方。