c++ - 将用 Magick++ 加载的 1 位图像转换为 HBITMAP
问题描述
我想知道是否可以将我用 Magick++ ( Magick::Image image; image.read(path);
) 加载的 1 位图像转换为深度等于 1 的 HBITMAP(类似于你通过这样的调用得到的结果CreateBitmap(width, height, 1, depth, data);
。
天真CreateBitmap(width, height, 1, depth, image.getConstPixels(0, 0, width, height));
的尝试当然没有奏效——ImageMagick 数据显然是以不同的方式存储的。我能够使用BITMAP
容器(不是完整代码)正确复制该数据:
bitmap.bmWidth = image->image()->columns;
bitmap.bmHeight = image->image()->rows;
bitmap.bmWidthBytes = 4 * bitmap.bmWidth;
bitmap.bmPlanes = 1;
bitmap.bmBitsPixel = 32;
...
for (y = 0; y < (ssize_t)image->image()->rows; y++) {
p = GetVirtualPixels(image->image(), 0, y, image->image()->columns, 1, exception);
if (!p) break;
for (x = 0; x < (ssize_t)image->image()->columns; x++)
{
q->rgbRed = ScaleQuantumToChar(GetPixelRed(image->image(), p));
q->rgbGreen = ScaleQuantumToChar(GetPixelGreen(image->image(), p));
q->rgbBlue = ScaleQuantumToChar(GetPixelBlue(image->image(), p));
q->rgbReserved = 0;
p += GetPixelChannels(image->image());
q++;
}
}
当目标位图是 32 位图像时,它可以工作。但是假设目标图像是 1 位的。ImageMagick 中是否有一个函数可以让我以一种可以轻松转换为 1 位的方式提取数据?我找不到另一个类似的功能ScaleQuantumToChar
。ImageMagick 支持吗?
解决方案
推荐阅读
- objective-c - OSX移动光标事件在网络浏览器中不起作用
- node.js - 如何在 Angular 6 中使用 node.js 模块?
- python - 使用 heap.rotator.Rotator.rotate_map 旋转天空贴图时出现“错误的像素数”类型错误
- javascript - 在渲染函数中定义的return内部调用react映射中的函数
- powershell - 在powershell上运行.ps1文件:IP地址连接
- php - 对 SQL 表中的 x 到 x+n 列求和
- webpack - Webpack Uglify:保留一定的 console.logs
- c# - 将标签居中放入表单
- c# - 如何使用 64 位 MSBuild 构建 ac# 解决方案?
- java - 为 64 位编译 Hadoop 时出现 Maven 异常