【问题标题】:Combining Images to display in the picturebox组合图像显示在图片框中
【发布时间】:2014-03-13 18:13:53
【问题描述】:

在 C# Windows 窗体中,我希望能够操作图像以将其显示为 3 个图像放在一起。操作包括对于三个轴中的每一个,我在每个轴上都有一个 2D 图像。结果看起来像 3D 图像。

例如,如果我有 3 张位图图像; a、b 和 c。然后我想制作一个 3D 图像,其中 x 轴有图像 a,y 轴有图像 b,z 轴有图像 c。

像这样:http://chanceandchoice.files.wordpress.com/2008/11/planes.jpg

请帮忙!

【问题讨论】:

    标签: c# 3d picturebox


    【解决方案1】:

    您可以使用 GDI+ 倾斜图像 a、b 和 c,然后将新的“3D”图像绘制到新的位图中。

    请阅读以下关于倾斜的链接http://msdn.microsoft.com/en-us/library/3b575a03%28v=vs.110%29.aspx

    在倾斜图像并将它们绘制到新位图中时,您必须确保以下几点:

    • a 的右上角 = b 的左上角
    • a 的左下角 = c 的左下角
    • b 的左下角 = c 的左上角

    现在这是基于图像是正方形的假设,我不确定您(作为开发人员)将如何处理矩形图像(也许您可以拉伸它,取决于您)。我也使用相同的图像而不是 A B 和 C,但概念应该是相同的。

    这是一个用 WinForm 的 OnPaint 方法编写的快速示例

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
    
            Bitmap xImage = new Bitmap(@"PATH TO IMAGE");
    
            Size xImageSize = xImage.Size;
            int Skew = 30;
    
            using (Bitmap xNewImage = new Bitmap(120, 120)) //Determine your size
            {
                using (Graphics xGraphics = Graphics.FromImage(xNewImage))
                {
                    Point[] xPointsA =
                    {
                        new Point(0, Skew), //Upper Left
                        new Point(xImageSize.Width, 0), //Upper Right
                        new Point(0, xImageSize.Height + Skew) //Lower left
                    };
                    Point[] xPointsB =
                    {
                        new Point(xImageSize.Width, 0), //Upper Left
                        new Point(xImageSize.Width*2, Skew), //Upper Right
                        new Point(xImageSize.Width, xImageSize.Height) //Lower left
                    };
                    Point[] xPointsC =
                    {
                        new Point(xImageSize.Width, xImageSize.Height), //Upper Left
                        new Point(xImageSize.Width*2, xImageSize.Height + Skew), //Upper Right
                        new Point(0, xImageSize.Height + Skew) //Lower left
                    };
    
                    //Draw to new Image
                    xGraphics.DrawImage(xImage, xPointsA);
                    xGraphics.DrawImage(xImage, xPointsB);
                    xGraphics.DrawImage(xImage, xPointsC);
                }
                e.Graphics.DrawImage(xNewImage, new Point()); //Here you would want to assign the new image to the picture box
            }
        }
    

    【讨论】:

      【解决方案2】:

      您必须对图像进行“透视变形”。 查看类似问题的答案:4-point transform images

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 1970-01-01
        • 2012-08-05
        • 1970-01-01
        • 2021-06-25
        • 2014-06-01
        • 2014-12-17
        • 2022-11-16
        相关资源
        最近更新 更多