将System.windows.Controls.Image转换为System.Drawing.Bitmap

时间:2013-11-20 23:38:58

标签: c# image-processing kinect

问题说明了一切。我看了很多例子并且搜索了很多但似乎什么都没有用。

这是我的代码:

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

                    }

                }

            }

1 个答案:

答案 0 :(得分:0)

WriteableBitmap旋转并尝试在其上渲染Image元素。之后,通过复制像素来创建System.Drawing.Bitmap,因为WriteableBitmap为您提供了原始访问权限。

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