问题标签 [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.
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
c# - C# 从项目资源中获取图像源会导致内存泄漏
好的,在我的项目资源中,我有一些图像(.png)。每当用户单击Button
新图像时,都会以ImageBox
. 因为我所有的图像都存储在我的项目资源中,所以我必须获取Image.Source
代码。我设法通过使用Method
这样的来做到这一点:
在我的应用程序中一切正常。没有错误,没有警告,每次我推送Button
. 在内存中进行了一些监控之后,我注意到每次调用getBitmapSourceFromBitmap
我的内存每次都会爆炸 100MB。有谁知道为什么会这样?对不起我的英语不好。
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) 时,一切正常。
我做错了什么?
谢谢马蒂
c# - 获取具有透明度的文件缩略图
我想获得透明的文件缩略图。
我有以下代码来实现它:
我从这里混合了代码:
有一种在 BitmapSource 和 Bitmap 之间转换的好方法吗?
并
从 System.Drawing.Bitmap 加载 WPF BitmapImage
通过这种方式,我转换BitmapSource
为位图,然后将位图转换为BitmapImage
. 我很确定有一种方法可以在保存透明度的同时BitmapSource
直接转换为。BitmapImage
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# 对象。
c# - BitmapSource.Create 切换 RGB 值
我正在使用以下代码将文件中的像素加载到字节数组中:
我很确定这不是问题。加载文件后,我想显示操纵颜色,然后显示在 WPF 窗口中。
因此,我使用以下行创建了位图源:
问题是红色字节与绿色字节切换。与此类似 -为什么将 BitmapSource 保存到 PixelFormat.Format48bppRgb 的位图时颜色会发生变化?- 但我不知道如何解决它。
xaml - 如何在 XAML 中将自定义 ImageSource 提供给 Image
在 XAML 中为 Image 设置 ImageSource 的一种方法是:
此代码包含一个很好的优化,因为一个可能很大的位图将被解码为 75x75 像素。
我希望能够用我的自定义类替换 BitmapImage,如下所示:
我的应用程序实现了映射到数据库表的 Picture 类。图片类具有创建 BitmapImage 实例所需的一切。所以PictureBitmap本质上是BitmapImage的一个适配器。
我是这样开始的:
虽然 BitmapSource 是抽象的,但API 参考并没有说明如何实现它。
有谁知道如何将自定义对象提供给 Image.Source?
我的应用支持 Windows Phone Mango (7.5) 及更高版本。
谢谢!
c# - 使用指针访问 BitmapSource
有没有办法BitmapImage
使用 c# 指针访问对象的底层内存?
我知道有一种CopyPixels
方法,但它将像素数组的副本复制到一个新数组中(复制内存要求)。如果您打开一个大图像(2gb),它会分配很多无用的东西。如果你想操作某种精细化,比如 CCLA,它需要大量的内存。
我只需要读取像素阵列。
是否可以像在 中那样直接寻址像素System.Drawing.Bitmap
?
我System.Drawing.Bitmap
为BitmapSource
. 否则我必须复制图像加载(我的旧方法的位图并BitmapSource
在 WPF 中显示图像)占用大量内存和时间。
谢谢洛伦佐
c# - BitmapSource.Create 创建图像数据的两个副本
有一个处理大量图像的应用程序。内存占用大约是预期大小的两倍。
我已将我的代码修剪为如下所示,_source 是一个实例变量,它保持在范围内:
如果我通过 ANTS Memory Profiler 提供它,我会看到 BitmapSafeMIHandle 被分配,并且每次运行时,内存使用量的增加大约是位图大小的两倍。
我不做什么?我必须忍受这个吗?任何和所有信息都表示赞赏。
干杯,奈杰尔
c++ - 如何在不同线程的 C++/CLI 中将图像数据从 BitmapSource (WPF) 复制到 cv::Mat (OpenCV)?
我BitmapSource
在 UI 线程中创建了一个,我想将其像素数据复制到cv::Mat
一个单独的线程上进行处理。当然,如果我用Dispatcher.Invoke
call 包装复制代码,但我会浪费同步时间。
我尝试冻结该bitmapSource
对象,现在它在调用之前一直有效,CopyPixels
但在尝试将其内容复制到inputImage
数据时失败。如果对象被冻结,为什么CopyPixels
不能将其冻结的缓冲区复制到另一个内存缓冲区?关于如何避免在主线程上调用调用的任何想法?是否有任何其他 WPF 位图对象能够做到这一点?