【问题标题】:C# merge two rotated bitmapsC#合并两个旋转的位图
【发布时间】:2015-11-18 02:19:02
【问题描述】:

我正在尝试旋转两个位图,然后将结果复制到第三个。

Bitmap bmp_1 = new Bitmap(Program.Properties.Resources.MyImage); // 100x100 px
Bitmap bmp_2 = new Bitmap(Program.Properties.Resources.MyImage); // 100x100 px
Bitmap bmp_merged = new Bitmap(200, 100, PixelFormat.Format32bppArgb);

float angle, bw2, bh2;

using (Graphics g = Graphics.FromImage(bmp_merged))
{
    using (Graphics graphics = Graphics.FromImage(bmp_1))
    {
        angle = 15;

        bw2 = bmp_1.Width / 2f;
        bh2 = bmp_1.Height / 2f;

        graphics.TranslateTransform(bw2, bh2);
        graphics.RotateTransform(angle);
        graphics.TranslateTransform(-bw2, -bh2);
        graphics.DrawImage(bmp_1, 0, 0);
    }
    using (Graphics graphics = Graphics.FromImage(bmp_2))
    {
        angle = 35;

        bw2 = bmp_2.Width / 2f;
        bh2 = bmp_2.Height / 2f;

        graphics.TranslateTransform(bw2, bh2);
        graphics.RotateTransform(angle);
        graphics.TranslateTransform(-bw2, -bh2);
        graphics.DrawImage(bmp_2, 0, 0);
    }
    g.DrawImage(bmp_1, 0, 0);
    g.DrawImage(bmp_2, 100, 0);
}

问题:

使用graphics.DrawImage(bmp_1, 0, 0); 后,我预计bmp_1 将是一个旋转的图像。

但它实际上是原始的bmp_1 图像及其上绘制的旋转版本。

【问题讨论】:

  • 您从 bmp_1 创建图形,因此您在 bmp_1 中绘图。我很想知道结果没有失真,因为你在自身上绘制图像。

标签: c# winforms bitmap rotation image-rotation


【解决方案1】:

绘制从Bitmap 实例获得的Graphics 对象不会首先清除Bitmap 实例。它只是借鉴了那里的一切。

不要修改你开始的位图,你应该将它们旋转到目标位置。例如,像这样:

using (Graphics g = Graphics.FromImage(bmp_merged))
{
    angle = 15;

    bw2 = bmp_1.Width / 2f;
    bh2 = bmp_1.Height / 2f;

    g.TranslateTransform(bw2, bh2);
    g.RotateTransform(angle);
    g.TranslateTransform(-bw2, -bh2);
    g.DrawImage(bmp_1, 0, 0);

    angle = 35;

    bw2 = bmp_2.Width / 2f;
    bh2 = bmp_2.Height / 2f;

    g.ResetTransform();
    g.TranslateTransform(bw2, bh2);
    g.RotateTransform(angle);
    g.TranslateTransform(-bw2, -bh2);
    g.DrawImage(bmp_2, 0, 0);
}

当然,您确实应该将用于绘制以特定角度旋转的位图的代码考虑到它自己的方法中,这样您就没有两个代码副本。但是以上应该解决您的基本问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多