- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
据我所知,从 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/
如何在 C# 中高效地将 BitmapSource 转换为 byte[],反之亦然? 最佳答案 BitmapSource 到 byte[]: private byte[] BitmapSourceTo
我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像“someImage.png”,它是嵌入资源: protected override void OnRender(System.Win
我正在尝试将 native 图像数据结构编码到 BitmapSource。 这是原生结构: struct Bitmap_8Bit { public:
我有这个 BitmapSource source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetH
为 Metro Style 应用程序实现本地缓存的最佳模式是什么,以便可以在应用程序在线使用时在后台缓存图像并在应用程序离线时提供图像? 我们如何在发现无法访问互联网时将 BitmapSource 设
如何从图像文件加载 BitmapSource? 最佳答案 The BitmapImage class is a non-abstract subclass of BitmapSource ,因此只需使
我正在使用此 C# 代码访问图像文件,以便从中读取元数据。 BitmapSource img = BitmapFrame.Create(uri); 不幸的是,uri 指定的图像文件被锁定,直到程序结束
我如何创建一个 BitmapSource d,它是 BitmapSource s 旋转任意角度 a 的内容? RotateTransform 不适用,因为它仅限于 90 度倍数的角度。 编辑:Rota
我是 WPF 和 GDI 的新手,在显示图像时遇到问题。我的最终目标是构建类似暴露的东西。到目前为止,我将屏幕变灰,收集所有事件的 HWND,并捕获所有窗口的屏幕。现在,我有一个 Image 元素,我
我有相当多的图像要加载到我的 WPF 应用程序的列表框中。最初我使用 GDI 来调整图像大小(原件占用太多内存)。这很好,除了他们每张图像花费大约 400 毫秒。不太好。因此,在寻找另一种解决方案时,
我有一个 .NET BitmapSource目的。我想读取位图角上的四个像素,并测试它们是否都比白色暗。我该怎么做? 编辑:我不介意使用更好的 API 将此对象转换为另一种类型。 最佳答案 Bitma
我正在开发一个 BlackJack 程序,该程序显示 BlackJack 牌 table 、纸牌等。计划是它会使用自动化策略接连玩数千手牌。 我有一个 PlayerSeat UserControl,它
我将一个 Image.Source 属性绑定(bind)到下面显示的属性的结果。 public BitmapSource MyImageSource { get { B
您应该如何处理 BitmapSource ? // this wont work because BitmapSource doesnt implement IDisposable using(Bit
我需要将 Clipboard.GetImage() 的内容(一个 BitmapSource)解析为一个 BitmapImage。有谁知道如何做到这一点? 最佳答案 我找到了一个干净的解决方案: Bit
我是 WPF 的初学者,正在尝试一个家庭项目以熟悉该技术。我有一个简单的表单,用户可以在其中选择一个图像文件,然后显示 EXIF 数据和图像的缩略图。这工作正常,但是当我选择一个 RAW 图像文件(~
我创建了一个 WPF 控件(从 FrameworkElement 继承),它显示可以平移的平铺图形。每个图块为 256x256 像素,24bpp。我已经覆盖了 OnRender。在那里,我加载任何新图
如何将 BitmapSource 转换为 MemoryStream。虽然我尝试了一些代码: private Stream StreamFromBitmapSource(BitmapSource wri
系统:Windows XP SP3,.NET 3.5,4GB 内存,双 1.6GHz 我有一个 WPF 应用程序,可以加载和转换(使用 Storyboard动画)非常大的 PNG。这些 PNG 的分辨
在 WPF 中, System.Windows.Clipboard.getImage() 函数返回 BitmapSource 目的。作为来自 WinForms 背景的 WPF 新手,我不清楚如何将此图
我是一名优秀的程序员,十分优秀!