问题标签 [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.
c# - 使用 BitmapSource、PngBitmapEncoder/Decoder 时,在 PNG 中保存 8 位索引数据会改变原始字节
使用 BitmapSource 和 PngBitmapEncoder/Decoder 保存和加载 PNG 时出现问题。基本上,我希望能够保存一个源自字节数组的图像,并且当 PNG 加载到我的程序中时,重新加载完全相同的字节。原始数据的保存很重要。
同时,我希望 PNG 使用自定义调色板(256 色的索引数组)。
我正在尝试使用自定义索引调色板保存我的 8 位数据。原始数据的范围可以是 0-255。调色板可以是“阈值”调色板(例如,0-20 是颜色#1,21-50 是颜色#2,等等)。
我发现当我保存数据、重新加载并执行 CopyPixels 以检索“原始”数据时,数据值是根据调色板设置的,而不是原始字节数组值。
有没有办法在不丢失自定义调色板的情况下保留 PNG 中的原始字节数组?还是有不同的方法从 BitmapSource 检索字节数组?
以下是我的保存例程:
这是我的加载程序:
任何建议,将不胜感激。谢谢。
附录#1:我发现部分问题在于 PNG 被保存为 32 位颜色,尽管我将它设置为 Indexed8 并使用 256 项调色板。这似乎也取决于设置的调色板。知道为什么吗?
wpf - 使用 Libtiff.net 将 BitmapSource 保存为 Tiff 编码的 JPEG
我正在尝试编写一个例程,该例程将使用 LibTiff.net 将 WPF BitmapSource 保存为 JPEG 编码的 TIFF。使用 LibTiff 提供的示例,我想出了以下内容:
这会转换图像,我可以看到 JPEG 图像,但颜色混乱。我猜我错过了 TIFF 的一个或两个标签,或者像光度解释这样的错误,但并不完全清楚需要什么。
干杯,
c++ - BitmapSource copyPixels 正确参数
我使用的步幅会产生异常。我不知道什么步幅是正确的。输入图像为 32 位 JPG。请告诉我应该输入哪些值(我尝试了很多东西,但它们在哪里生成异常或损坏的 JPG):
c# - 将图像附加到剪贴板
我有Chart
具有CopyToClipboard(size)
功能的第三方控件。同样的方法BitMapSource
也返回。
所以我的需要是:将另一个附加BitMapSource
到剪贴板。如何实现此功能?
这两个图像之间的相似性可能是相同的宽度和不同的高度。我必须在另一个下面附加一个。
c# - 在 WPF 中,我可以在 2 个按钮之间共享相同的图像资源吗
我想在 WPF 中创建一个开/关按钮,并且我希望它在用户单击它时更改其外观(如果它是打开的,则切换为关闭,如果它是关闭的,则切换为打开)使用图像。我将要使用的图像添加到资源中:
事件代码是,“flag”是一个布尔局部变量,初始化为真:
现在我需要创建 2 个开/关按钮,它们的行为相同。当我尝试对第二个按钮使用相同的资源时,我遇到了一个异常:
我可以在第二个按钮中使用相同的图像资源,还是必须再次将图像添加为具有不同键的资源?
wpf - 图像的异步数据绑定,导致跨线程异常
我的 WPF 应用程序有问题。我正在尝试使用我的视图模型中的图像属性在我的网格视图中对图像字段进行数据绑定。
这没问题,如果我不使用 IsAsync。但是,我想异步执行,因为要加载很多图像,并且需要从 Web 服务加载它们。
Image 属性的代码是这样的,它只调用一个处理程序 dll,它调用一个 web 服务。
但是,一旦我添加了 IsAsync=true,一旦加载了表单,我就会得到以下异常:
The calling thread cannot access this object because a different thread owns it.
我对 WPF 很陌生,我有点假设,当 async 设置为 true 时,它自己处理线程。我是否需要在数据绑定中以某种方式调用?如果是这样,我到底该怎么做?
c# - 如何读取 BitmapSource 四个角的像素?
我有一个 .NET BitmapSource对象。我想读取位图角落的四个像素,并测试它们是否都比白色更暗。我怎样才能做到这一点?
编辑:我不介意将此对象转换为具有更好 API 的另一种类型。
c# - BitmapSource.Create() 方法中 DPI 的相关性是什么?
我阅读了有关DPI的 Wikipedia 文章,但它让我更加困惑……我在图像上没有任何 DPI 信息。我应该在BitmapSource.Create()中使用什么 DPI ,使用常量(96/72?)是否可以,如果我不打算打印图像真的很重要吗?
c# - 减少 C# WPF 中裁剪图像的应用程序内存
我们通过从原始位图创建一个新的 CroppedImage 在我们的 WPF 应用程序中显示裁剪的图像。但是当我们查看应用程序内存时,显示裁剪图像和显示原始图像是一样的。这可能并不奇怪,因为 CroppedImage 保留了对原始位图的引用。但是,是否有可能在不引用原始位图的情况下将裁剪的图像创建为新的位图图像,并通过这样做减少应用程序内存?
一些有关如何执行此操作的代码将不胜感激。
感谢帮助!
[编辑] 这是创建裁剪图像的代码:
wpf - BitmapSource 中的 BitmapImage 始终为 Bgr32
我正在从 BitmapSource 加载 BitmapImage,我总是发现 BitmapImage 的格式是 Bgr32 而不是 BitmapSource 的 Bgra32。这里有一个类似的线程: BitmapImage from file PixelFormat always is bgr32
但是正如线程中所建议的那样,使用 BitmapCreateOptions.PreservePixelFormat 对我不起作用。这就是我正在做的事情:
有没有办法从 BitmapSource 创建 BitmapImage 并保留 alpha 通道?
更新: 我使用另一个线程中发布的相同代码从文件加载 testbmp2.bmp,加载后,Format 属性为 Bgr32。
所以也许我没有正确保存 FileStream/MemoryStream?这似乎不对,因为在保存 FileStream 后,我可以在 Photoshop 中打开 testbmp2.bmp 并查看 alpha 通道。
更新 2: 我认为我需要重新表述我遇到的问题。我正在尝试显示纹理的单独通道。我通过图像控件显示位图。我有一个简单的 HLSL 预编译着色器分配给图像的效果属性,它将屏蔽基于通道的用户输入。在保留 alpha 通道的同时无法将 BitmapSource 转换为 BitmapImage 只是问题的一部分。我现在意识到,由于我原来的 BitmapSource 格式是 Bgra32,我可以将它直接分配给 Image 的 Source 属性。问题似乎是 Image 对象只会显示带有预乘 alpha 的纹素......?这是我的着色器代码:
我已经对其进行了广泛的测试,并且我很确定它正确设置了 outCol 值。当我传入 (1.0, 1.0, 1.0, 0.0) 的通道掩码值时,显示的图像是 RGB 通道,其中黑色的 alpha 区域绘制为黑色 - 正如您所期望的那样,如果 WPF 预乘 alpha到 RGB 通道。有谁知道在没有预乘 alpha 的情况下在图像中显示 BitmapSource 的任何方法?或者更重要的是,有没有办法让效果在 alpha 预乘发生之前接收纹理?我不确定事情是按什么顺序完成的,但显然预乘发生在纹理写入 s0 寄存器并且着色器开始处理它之前。