我有这个代码:

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

    }

最佳答案

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

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

请参阅 HorizontalResolutionVerticalResolution 属性以及 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/

10-09 21:38