2011-02-08 62 views
0

我试图实现一个函数,它需要一个System.Drawing.Bitmap对象并在WPF Canvas上呈现它。位图必须在渲染前裁剪并加入几次。从System.Drawing.Bitmap区域创建和调整WPF中的图像

环境:在运行上.NET 3.5 SP1

输入 WPF应用程序:System.Drawing.Bitmap对象,尺寸800×600和像素格式的RGB24

目标:用于显示图像它由输入位图的两个条纹组成(在一行上)。条纹是两个位图的一半 - (0,0,800,300)和(0,300,800,600)。稍后,我希望能够向上或向下缩放图像。我已经实现了GDI和Graphics.DrawImage(渲染成一个Bitmap对象)的解决方案,但我想提高性能(这个函数可以被称为每秒30次)。

是否有更快的方式来实现这与WPF,假设我想在WPF窗口上呈现图像?

回答

0

我发现迄今最好的解决办法是使用WriteableBitmap的,这样的事情:

void Init() 
{ 
    m_writeableBitmap = new WriteableBitmap(DesiredWidth, DesiredHeight, DesiredDpi, DesiredDpi, PixelFormats.Pbgra32, null); 
{ 

void CopyPixels(System.Drawing.Bitmap frame, Rectangle source, Point destBegin) 
{ 
    var bmpData = frame.LockBits(source, ImageLockMode.ReadOnly, frame.PixelFormat); 
    m_writeableBitmap.Lock(); 

    var dest = new Int32Rect(destBegin.X, destBegin.Y, bmpData.Width, bmpData.Height); 
    m_writeableBitmap.WritePixels(dest, bmpData.Scan0, bmpData.Stride * bmpData.Height, bmpData.Stride); 

    m_writeableBitmap.Unlock(); 
    frame.UnlockBits(bmpData); 
} 

CopyPixels会两次,我在我的问题(二条纹)所描述的用例被调用。

+0

我是新来的WPF可以请你提供我的链接有用的教程,我不得不主要处理位图图像创作有这个文字。我会对你这么傻 – 2014-07-04 14:12:38