问题标签 [wic]

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 投票
1 回答
125 浏览

c - 线程在 WIC 中返回错误(有时)

我使用 WIC 制作了一个编码器。然后我尝试在最耗时的部分使用线程。这是

piBitmapSrc → WICBitmap

rc → WICRect,矩形区域做的工作

这就是我尝试的方式。

然后我这样称呼它

问题是,piBitmapFrame->WriteSource()调用了 4 次,但只有 1 次返回 S_OK。其他 3 个返回以下错误代码

WINCODEC_ERR_STREAMWRITE

或者

WINCODEC_ERR_CODECTOOMANYSCANLINES

这是为什么。以及我如何正确使用线程来做到这一点

0 投票
0 回答
245 浏览

image - 如何使用 WIC 确定图像色彩空间?

如何使用 WIC 确定图像的色彩空间?我想知道图像是 RGB、CMYK 还是单声道(黑白)。我不想查看所有可用的颜色格式。

为什么我想知道我想使用 IWICColorContext::InitializeFromFilename 方法,但要给它一个正确的配置文件,我需要知道图像是 RGB、CMYK 还是单声道。

0 投票
1 回答
542 浏览

mfc - 将图像从 CDC 传输到 Windows 映像组件 (WIC)?

我有一些旧的 C++/MFC 代码,它们使用 GDI 在设备上下文 () 中创建图像CDC,使用Rectangle. 然后图像被 . 的析构函数绘制到屏幕上CPaintDC。一切都按预期工作。

现在我想将图像存储在 PNG 文件中。为此,我正在使用 Windows 映像组件 (WIC)。我可以通过创建位图框架、将像素存储在缓冲区中并使用WritePixels. 然后 WIC 将图像存储为 PNG 文件,通过Commit. 这一切也有效。

问题是,如何将我使用 GDI 创建的图像(位于 aCDC中)传输到 WIC 识别的东西上?我正在寻找比CDC::GetPixel循环存储到缓冲区中更有效的东西,然后是WritePixels.

Windows 7、Visual Studio 2015、C++。

更新:我正在尝试获取@Andrew Komiagin 建议的 CImage 方法。我的代码是

这会生成一个带有全黑正方形、wxh 像素的 PNG 图像文件,而不是我绘制的图像。我知道图像正在正确绘制RenderToDC(见下文)。

为了比较,这是MyControl::OnPaint用于控制(源自CStatic):

图像正确显示。

0 投票
1 回答
580 浏览

visual-studio-2015 - Visual Studio 2015 社区版中的 WIC Explorer

我想开始使用 WIC(Windows 成像组件)资源管理器。

我已经下载了WIC Explorer 解决方案。

我已经下载了Windows 模板库版本 9.0,这是必需的,并按照说明将文件从“包含”目录复制到 WIC Explorer 解决方案的“wtl90”目录。

我正在使用 Visual Studio 2015 社区版。我构建了 WIC Explorer 解决方案,但是出现了错误,不是在 WIC Explorer 项目中,而是在 Windows 模板库文件中。

我查看了 Windows 模板库Read Me #Support for Visual C++ Express并且在 Visual C++ Express 中工作时需要 ATL 版本 8,因为看起来 Express 版本没有附带 ATL,所以我认为它是相同的2015 社区版。

自述文件说 ATL 在Windows Driver Kit Version 7.1.0中可用,所以我安装了它并按照说明运行 AppWiz\setup.js,但是它给了我一个错误,指出它找不到 Visual Studio 的版本安装。

如何使用 Visual Studio 2015 Community Edition 设置 ATL,以便正确构建 WIC Explorer 解决方案?

更新: 如果在安装过程中选择 ATL 作为选项,显然 ATL 与 Visual Studio 2015 社区版一起安装。如果选择了该选项,我猜它与 MFC 一起安装。虽然很明显我仍然需要为 WIC Explorer 做一些设置,因为包含的 WTL 文件似乎不知道 ATL。

我想知道 AppWiz\setup.js 文件可以修改为包含 Visual Studio 2015 社区版的路径。虽然我不知道新的路径会是什么。

0 投票
0 回答
110 浏览

c++ - 如何获取 IWICDevelopRaw 接口

我正在使用 WIC 和 Direct2D 渲染原始照片(索尼 .arw)。这部分我正在加载它,我可以在屏幕上绘制它。我想要做的是访问 IWICDevelopRaw 接口。我假设解码器会实现该接口,所以我尝试了:

但是hrNO_INTERFACE在通话之后to pDecoder.AsIID(IID_IWICDevelopRaw, &u)

0 投票
2 回答
1223 浏览

directx - 如何通过 WIC 将 YCbCr 平面格式转换为 UWP 的打包格式?

我的来源来自 FFmpeg,它是 YCbCr 平面格式(YUV420P,I420),

由于某些原因,我需要将其转换为 YCbCr 打包格式(NV12),

它必须通过 WIC YCbCr API 来完成,我该怎么做?

0 投票
0 回答
255 浏览

windows-server-2008-r2 - Windows server 2008 r2 上的 Windows 映像组件

我在我的 Web 应用程序中显示图片时遇到问题。有人让我检查是否已注册 Windows 映像组件。

在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows 映像组件中找不到它

但我阅读了检查是否安装了 Windows 映像组件(wic 注册表)并且它已在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WIC 注册

在此处输入图像描述

安装好了吗?谢谢

0 投票
1 回答
455 浏览

c++ - WIC 增加 TIFF 图像的大小

场景: 加载TIFF图像,提取tiff图像的帧并保存在本地。将提取的帧组合到输出 TIFF 图像。当我尝试合并帧时,输出 tiff 图像的大小急剧增加。例如,如果我的输入大小为 40 MB,则输出将增加到 300 MB。下面是解释场景的代码,

0 投票
1 回答
910 浏览

c++ - Windows 映像组件 - 如何从 HBITMAP 获取编码器?

我有一个由第 3 方库提供的 HBITMAP,需要将其重新调整为 JPEG 在磁盘上写入。

我从未使用过 WIC,所以我一直在关注本教程:https ://msdn.microsoft.com/en-us/library/windows/desktop/ff973956.aspx

我从我的 HBITMAP 创建了一个 WicBitmap。

在清单 9 中,很明显我需要一个解码器,但我发现创建它的唯一方法是使用 IWICImagingFactory::CreateDecoderFromFilename。有一个 Initialize 方法接收 IStream,但我不确定使用它的正确方法。

这是将 HBITMAP 保存到磁盘的正确方法吗?如果是这样,我如何从我的 HBITMAP 或 WicBitmap 获取解码器?

0 投票
1 回答
275 浏览

c# - SharpDX:BitmapFrameEncode.WriteSource 对某些图像需要更长的时间

我已经用 SharpDX 替换了一些不可靠的 GDI+ 例程,以从 Stream 加载双色调 TIFF 图像,在其上渲染文本,然后将其作为 Stream 保存回 TIFF 格式。

但是 SharpDX 代码需要更长的时间来做同样的事情,我想知道我是否做错了什么。

正如您从此处的示例中看到的那样,我有 2 个不同的功能:

  • RenderImageFromExistingImage
  • 保存渲染图像

    /li>

它们大部分是相同的,并且做的事情大致相同,除了第一个 (RenderImageFromExistingImage) 采用现有的 1000x500 双色 TIFF 图像作为基础图像,第二个 (SaveRenderedImage) 从头开始​​创建一个类似大小的 WIC 位图.

获取现有图像的函数执行大约需要 30-40 毫秒,其中大部分时间(约 30 毫秒)由BitmapFrameEncode.WriteSource占用。此函数等效于被替换的 GDI+ 代码。

从头开始创建 WicBitmap 的函数需要8-10 毫秒来执行,而在BitmapFrameEncode.WriteSource中不需要花费大量时间,这与它所替换的 GDI+ 函数的时间大致相同。唯一的区别是这个功能不加载预先存在的图像,这是我需要的。

与 SaveRenderedImage 相比,为什么BitmapFrameEncode.WriteSource(它似乎是 IWICBitmapFrameEncode 的一个薄包装)在BuildImageFromExistingImage中如此缓慢?

我的猜测是 BuildImageFromExistingImage 速度较慢,因为它正在对传入图像进行额外的转换(使用FormatConverter ),将其转换为 D2D 将处理的像素格式,并且这样做的时间损失在BitmapFrameEncode之前不会发挥作用.WriteSource发生。

有什么我做错了吗?或者与基于 GDI+ 的调用相比,WIC(Windows 映像组件)是否慢?

理想情况下,我需要第一种情况 (BuildImageFromExistingImage) 与它所替换的 GDI+ 代码一样快,并且希望它应该可以使其与打算替换的 GDI+ 代码一样快,如果不是更快的话。