- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用以下方法将 BitmapSource
转换为 Bitmap
:
internal static Bitmap ConvertBitmapSourceToBitmap(BitmapSource bitmapSrc)
{
int width = bitmapSrc.PixelWidth;
int height = bitmapSrc.PixelHeight;
int stride = width * ((bitmapSrc.Format.BitsPerPixel + 7) / 8);
byte[] bits = new byte[height * stride];
bitmapSrc.CopyPixels(bits, stride, 0);
unsafe
{
fixed (byte* pBits = bits)
{
IntPtr ptr = new IntPtr(pBits);
return new System.Drawing.Bitmap(
width,
height,
stride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb, //The problem
ptr);
}
}
}
但我不知道如何获取 BitmapSource
的 PixelFormat
,所以我的图像被破坏了。
对于上下文,我使用此技术是因为我想加载一个 tiff,它可能是 8 位或 16 位灰色或 24 位或 32 位颜色,并且我需要保留 PixelFormat
。我更愿意修复我的 ConvertBitmapSourceToBitmap
,因为它相当方便,但也很乐意用更好的技术替换以下代码,以便从 BitmapSource 创建位图:
Byte[] buffer = File.ReadAllBytes(filename.FullName);
using (MemoryStream stream = new MemoryStream(buffer))
{
TiffBitmapDecoder tbd = new TiffBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
return BitmapBitmapSourceInterop.ConvertBitmapSourceToBitmap(tbd.Frames[0]);
}
最佳答案
使用 BitmapSource.Format 有什么问题吗? ?这是 PixelFormat,您已经在使用它来确定步幅。
关于c# - 如何获得 BitmapSource 的 PixelFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373762/
如何在 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 新手,我不清楚如何将此图
我是一名优秀的程序员,十分优秀!