【问题标题】:Convert System.windows.Controls.Image to System.Drawing.Bitmap [duplicate]将 System.windows.Controls.Image 转换为 System.Drawing.Bitmap [重复]
【发布时间】:2013-11-20 23:38:58
【问题描述】:

问题说明了一切。我看过很多例子并用谷歌搜索了很多,但似乎没有任何效果。

这是我的代码:

System.Windows.Controls.Image abc = Image;
// SaveImageToJPEG(abc, "C:/1.jpg");

FindShape(new System.Drawing.Bitmap((Image.Source as BitmapImage).StreamSource));

该行:(Image.Source as BitmapImage) 返回null。

那么,如何从 System.windows.controls.Image 中获取位图?

这个问题与外面的所有问题都大不相同。我尝试了所有方法,但对我没有用。但最后我找到了解决方案。不幸的是,我无法将其发布为答案,因为 stackoverflow 的人们非常渴望将其关闭。 无论如何..这是答案:

System.Windows.Controls.Image abc = Image;

            MemoryStream ms = null;
            JpegBitmapEncoder jpegBitmapEncoder = null;
            BitmapEncoder bencoder = new JpegBitmapEncoder();

            System.Drawing.Bitmap bmp = null;
            BitmapImage bitmapImage = new BitmapImage();

            if ((int)abc.Source.Width>0)
            {
                RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap((int)abc.Source.Width,
                                                                               (int)abc.Source.Height,
                                                                               100, 100, PixelFormats.Default);
                renderTargetBitmap.Render(abc);

                jpegBitmapEncoder = new JpegBitmapEncoder();
                //jpegBitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
                bencoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
                using (ms = new MemoryStream())
                {

                    bencoder.Save(ms);

                    //if (ms != null)
                    {
                        bmp = new System.Drawing.Bitmap(ms);
                        //bmp.Save("C:/bmp_thing.jpg");

                        if (bmp != null)
                        {

                            count++;
                            if(count ==60){
                            int shape_type =FindShape(bmp);
                            Tetris_Game.NextBlockType = shape_type;


                            count = 0;
                            }
                            //  open_img.Dispose();

                        }
                        bmp.Dispose();
                        //ms.Flush();

                    }

                }

            }

【问题讨论】:

  • 但该链接是针对 BitmapSource 的。如何将图像源转换为位图源? .我试过(Image.Source as BitmapSource)我得到一个错误
  • Source 从一开始就需要是一个 BitmapImage 以便您检索它。您是否将 Uri 设置为 Image.Source 并希望在下载后从中获取 BitmapImage?
  • 我从 KinectDevice 获取图像...即从相机获取图像。我不知道它是什么格式。我所知道的是,来自相机的图像被分配给'System.Windows.Controls.Image'。
  • 您可以在 WriteableBitmap 上绘制图像并从那里获取您的副本吗?
  • 我该怎么做?我不知道该怎么做。我使用 C# 的次数不多。

标签: c# image-processing kinect


【解决方案1】:

试一试WriteableBitmap 并尝试在其上渲染您的图像元素。之后,您可以通过复制像素来创建 System.Drawing.Bitmap,因为 WriteableBitmap 为您提供了对它们的原始访问权限。

创建 WriteableBitmap 后,请查看here,了解如何将其转换为位图。

【讨论】:

  • 如何初始化 WritableBitmap?我从哪里获得 BitmapSource?
  • WriteableBitmap 也没有渲染方法
  • WriteableBitmap 是一个 BitmapSource。您使用的是哪个 .NET 版本?应该有一个接受 UIElement 的构造函数或方法。
  • 我现在怎么知道?
猜你喜欢
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2022-01-16
相关资源
最近更新 更多