【发布时间】:2011-08-22 12:20:25
【问题描述】:
我在 Win Forms 应用程序中有以下工作代码:
Bitmap bitmap = new Bitmap(imageWidth, imageHeight, PixelFormat.Format32bppArgb);
Rectangle rect = new Rectangle(0, 0, imageWidth, imageHeight);
BitmapData bitmapData = bitmap.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
Tao.DevIl.Il.ilConvertImage(Tao.DevIl.Il.IL_BGRA, Tao.DevIl.Il.IL_UNSIGNED_BYTE);
Tao.DevIl.Il.ilCopyPixels(0, 0, 0, imageWidth, imageHeight, 1, Tao.DevIl.Il.IL_BGRA, Tao.DevIl.Il.IL_UNSIGNED_BYTE, bitmapData.Scan0);
bitmap.UnlockBits(bitmapData);
我想将此代码转换为与 WPF 兼容并可以在 UI 中显示。这意味着我可能必须将 System.Drawing.Bitmap 转换为 System.Windows.Media.Imaging.BitmapImage。
但是,我没有在两者之间进行转换,而是想知道是否有更直接/更快的方法来做到这一点?就像在 BitmapImage 上做 LockBits() 之类的事情。
ilCopyPixels() 将 IntPtr 作为最后一个 baram。在旧代码中,我得到了这个表单 BitmapData.Scan0。
编辑:
感谢 Erno 的回答,我得出以下结论:
WriteableBitmap bitmap = new WriteableBitmap(imageWidth, imageHeight, 96, 96, PixelFormats.Bgra32, null);
bitmap.Lock();
Tao.DevIl.Il.ilCopyPixels(0, 0, 0, imageWidth, imageHeight, 1, Tao.DevIl.Il.IL_BGRA, Tao.DevIl.Il.IL_UNSIGNED_BYTE, bitmap.BackBuffer);
bitmap.Unlock();
但是,当我将位图设置为图像的来源时,我什么也看不到。不过我没有遇到任何异常。
谢谢!
【问题讨论】:
标签: .net wpf winforms image image-processing