我正在尝试实现一个带有System.Drawing.Bitmap对象并在WPF Canvas上呈现它的函数。在渲染之前,必须对位图进行裁剪和连接几次。
环境:在.NET 3.5 SP1上运行的WPF应用程序
输入:System.Drawing.Bitmap对象,大小为800x600,像素格式为RGB24
目标:显示由输入位图的两个条纹组成的图像(在一行上)。条纹是两个位图的一半 - (0,0,800,300)和(0,300,800,600)。后来我希望能够向上或向下缩放图像。
我已经用GDI和Graphics.DrawImage(渲染成Bitmap对象)实现了一个解决方案,但我希望提高性能(这个函数可以每秒调用30次)。
假设我想在WPF窗口上渲染图像,是否有更快的方法使用WPF实现此功能?
答案 0 :(得分: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将被调用两次。