问题标签 [bitmapsource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
469 浏览

wpf - 使用不带预乘 alpha 的 Image 类显示 RGBA 图像

我正在尝试根据用户输入显示纹理的单独 R、G、B 和 A 通道。我正在使用 Image 类来显示具有 alpha 通道的纹理。这些纹理被加载到 BitmapSource 对象中,并具有 Bgra32 格式。问题是,当我将 Image 的 Source 设置为 BitmapSource 时,如果我显示 R、G 或 B 通道的任何组合,我总是会得到预先乘以 alpha 值的像素。我写了一个非常简单的着色器,预编译它,并使用 ShaderEffect 类分配给 Image 的 Effect 属性以分离和显示单独的通道,但显然,着色器在 WPF 预乘后被赋予纹理alpha 值到纹理上。

下面是设置图片来源的代码片段:

这是着色器代码(它非常简单,但我想我会包含它只是为了完整性):

这是上面代码的输出:(
对不起,我没有足够的声誉点来发布图片或显然超过 2 个链接)

在 photoshop 中将文件保存到磁盘 (C:\temp\testbmp2.bmp):http:
//screencast.com/t/eeEr5kGgPukz

在我的 WPF 应用程序中显示的图像(使用上面代码片段中的图像掩码):
http ://screencast.com/t/zkK0U5I7P7

0 投票
1 回答
1515 浏览

c# - C# 从项目资源中获取图像源会导致内存泄漏

好的,在我的项目资源中,我有一些图像(.png)。每当用户单击Button新图像时,都会以ImageBox. 因为我所有的图像都存储在我的项目资源中,所以我必须获取Image.Source代码。我设法通过使用Method这样的来做到这一点:

在我的应用程序中一切正常。没有错误,没有警告,每次我推送Button. 在内存中进行了一些监控之后,我注意到每次调用getBitmapSourceFromBitmap我的内存每次都会爆炸 100MB。有谁知道为什么会这样?对不起我的英语不好。

0 投票
0 回答
161 浏览

c# - 用户定义的 BitmapSource 和 WriteableBitmap

我有一个 DICOM 图像数据,它包含 16 位灰度值。为了可视化数据,我需要应用一种窗口方法来切出 16 位值的片段。因此,我有两个属性,如 WindowCenter 和 WindowWidth。

由于我想使用 WPF 机制,我决定创建一个派生自 BitmapSource 的 DicomImage 类。由于 BitmapSource 无法直接访问内部像素数据,因此我创建了一个私有 WriteableBitmap (InternalImage) 成员,只要 WindowCenter 和 WindowWidth 发生更改,我就可以在其中操作数据。

要查看我附加到 Image.Source = DicomImage 的结果并显示图像。但是当我更改 WindowCenter/WindowWidth 时,图像不会更新。当我直接附加 WriteableBitmap (Image.Source = InternalImage) 时,一切正常。

我做错了什么?

谢谢马蒂

0 投票
2 回答
1332 浏览

c# - 获取具有透明度的文件缩略图

我想获得透明的文件缩略图。
我有以下代码来实现它:

我从这里混合了代码:
有一种在 BitmapSource 和 Bitmap 之间转换的好方法吗?

从 System.Drawing.Bitmap 加载 WPF BitmapImage

通过这种方式,我转换BitmapSource为位图,然后将位图转换为BitmapImage. 我很确定有一种方法可以在保存透明度的同时BitmapSource直接转换为。BitmapImage

0 投票
0 回答
667 浏览

c# - 在 C++/CLI 中从本机缓冲区创建和显示 RGBA 图像

我有一个包含 RGBA 图像的本机 char* 缓冲区。问题似乎是它是真正的 RGBA 格式,而不是 Windows 样式的 ARGB。(代表 BGRA,向后)

必须从缓冲区创建对象而不复制它。

到目前为止,我使用的BitmapSource是从缓冲区创建的:
BitmapSource::Create Method (Int32, Int32, Double, Double, PixelFormat, BitmapPalette, IntPtr, Int32, Int32)
我已经尝试过System::Drawing::Bitmap , 但不幸的是它似乎只支持窗口的 ARGB 格式,而不是“正常”的 RGBA。

现在我想要一个DeleteObject(BitmapSource ^ )函数来释放它正在使用的缓冲区。它应该在对象使用后调用。
使用位图非常简单:

我想对 BitmapSource (或任何其他可能使用 RGBA 的东西)做类似的事情。

我怎样才能安全地释放BitmapSource缓冲区?
如何获得 a 的底层缓冲区BitmapSource

我不介意使用任何其他可以使用和显示 RGBA 缓冲区(真正的 RGBA,而不是 Windows 样式的 ARGB)的 C# 对象。

0 投票
1 回答
1704 浏览

c# - BitmapSource.Create 切换 RGB 值

我正在使用以下代码将文件中的像素加载到字节数组中:

我很确定这不是问题。加载文件后,我想显示操纵颜色,然后显示在 WPF 窗口中。

因此,我使用以下行创建了位图源:

问题是红色字节与绿色字节切换。与此类似 -为什么将 BitmapSource 保存到 PixelFormat.Format48bppRgb 的位图时颜色会发生变化?- 但我不知道如何解决它。

0 投票
1 回答
691 浏览

xaml - 如何在 XAML 中将自定义 ImageSource 提供给 Image

在 XAML 中为 Image 设置 ImageSource 的一种方法是:

此代码包含一个很好的优化,因为一个可能很大的位图将被解码为 75x75 像素。

我希望能够用我的自定义类替换 BitmapImage,如下所示:

我的应用程序实现了映射到数据库表的 Picture 类。图片类具有创建 BitmapImage 实例所需的一切。所以PictureBitmap本质上是BitmapImage的一个适配器。

我是这样开始的:

虽然 BitmapSource 是抽象的,但API 参考并没有说明如何实现它。

有谁知道如何将自定义对象提供给 Image.Source?

我的应用支持 Windows Phone Mango (7.5) 及更高版本。

谢谢!

0 投票
1 回答
1562 浏览

c# - 使用指针访问 BitmapSource

有没有办法BitmapImage使用 c# 指针访问对象的底层内存?

我知道有一种CopyPixels方法,但它将像素数组的副本复制到一个新数组中(复制内存要求)。如果您打开一个大图像(2gb),它会分配很多无用的东西。如果你想操作某种精细化,比如 CCLA,它需要大量的内存。

我只需要读取像素阵列。

是否可以像在 中那样直接寻址像素System.Drawing.Bitmap

System.Drawing.BitmapBitmapSource. 否则我必须复制图像加载(我的旧方法的位图并BitmapSource在 WPF 中显示图像)占用大量内存和时间。

谢谢洛伦佐

0 投票
0 回答
144 浏览

c# - BitmapSource.Create 创建图像数据的两个副本

有一个处理大量图像的应用程序。内存占用大约是预期大小的两倍。

我已将我的代码修剪为如下所示,_source 是一个实例变量,它保持在范围内:

如果我通过 ANTS Memory Profiler 提供它,我会看到 BitmapSafeMIHandle 被分配,并且每次运行时,内存使用量的增加大约是位图大小的两倍。

我不做什么?我必须忍受这个吗?任何和所有信息都表示赞赏。

干杯,奈杰尔

0 投票
1 回答
1439 浏览

c++ - 如何在不同线程的 C++/CLI 中将图像数据从 BitmapSource (WPF) 复制到 cv::Mat (OpenCV)?

BitmapSource在 UI 线程中创建了一个,我想将其像素数据复制到cv::Mat一个单独的线程上进行处理。当然,如果我用Dispatcher.Invokecall 包装复制代码,但我会浪费同步时间。

我尝试冻结该bitmapSource对象,现在它在调用之前一直有效,CopyPixels但在尝试将其内容复制到inputImage数据时失败。如果对象被冻结,为什么CopyPixels不能将其冻结的缓冲区复制到另一个内存缓冲区?关于如何避免在主线程上调用调用的任何想法?是否有任何其他 WPF 位图对象能够做到这一点?