gpt4 book ai didi

c# - BitmapSource 和 Bitmap 之间有什么好的转换方法吗?

转载 作者:IT王子 更新时间:2023-10-29 03:57:13 24 4
gpt4 key购买 nike

据我所知,从 BitmapSource 转换为 Bitmap 的唯一方法是通过不安全的代码...像这样(来自 Lesters WPF blog):

myBitmapSource.CopyPixels(bits, stride, 0);

unsafe
{
fixed (byte* pBits = bits)
{
IntPtr ptr = new IntPtr(pBits);

System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
width,
height,
stride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb,ptr);

return bitmap;
}
}

反之:

System.Windows.Media.Imaging.BitmapSource bitmapSource =
System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

框架有没有更简单的方法?它不在那里的原因是什么(如果不是)?我认为它相当有用。

我需要它的原因是因为我使用 AForge 在 WPF 应用程序中执行某些图像操作。 WPF 想要显示 BitmapSource/ImageSource,但 AForge 在位图上工作。

最佳答案

可以通过使用 Bitmap.LockBits 将像素从 BitmapSource 直接复制到 Bitmap 而无需使用不安全代码/p>

Bitmap GetBitmap(BitmapSource source) {
Bitmap bmp = new Bitmap(
source.PixelWidth,
source.PixelHeight,
PixelFormat.Format32bppPArgb);
BitmapData data = bmp.LockBits(
new Rectangle(Point.Empty, bmp.Size),
ImageLockMode.WriteOnly,
PixelFormat.Format32bppPArgb);
source.CopyPixels(
Int32Rect.Empty,
data.Scan0,
data.Height * data.Stride,
data.Stride);
bmp.UnlockBits(data);
return bmp;
}

关于c# - BitmapSource 和 Bitmap 之间有什么好的转换方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2284353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com