问题说明了一切。我看了很多例子并且搜索了很多但似乎什么都没有用。
这是我的代码:
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();
}
}
}
答案 0 :(得分:0)
让WriteableBitmap旋转并尝试在其上渲染Image元素。之后,通过复制像素来创建System.Drawing.Bitmap,因为WriteableBitmap为您提供了原始访问权限。
创建WriteableBitmap后,请查看here如何将其转换为位图。