- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取 jpg 图像中像素的颜色,我可以在网上找到的所有教程都说使用不再存在的 pixelpacket。通过谷歌搜索和搜索,我发现 getvirtualpixels 可能是新方法,但最新版本中似乎也不存在。那么如何从带有图像缓存的图像中获取像素的颜色呢?顺便说一句,我不需要设置任何像素。使用windows10和visual studio 2015
最佳答案
PixelPacket
结构已替换为指向 Quantum
数据类型的指针。来自 Porting to ImageMagick Version 7 ,要理解的关键是像素现在可以具有动态部分(或以前称为“ channel ”的“特征”)。
ImageMagick version 7 supports any number of channels from 1 to 32 (and beyond) and simplifies access with a single method that returns an array of pixel channels of type Quantum.
您现在负责编写处理确定性(这是正确的术语吗?) 像素 channel 的代码。例如……
Magick::Image rose("rose:");
const Magick::Quantum * q = rose.getConstPixels(5, 5, 1, 1);
size_t channel_length = rose.channels();
for (size_t k = 0; k < channel_length; k++ ) {
std::cout << "Channel " << k << " = ";
std::cout << q[k] << " of " << QuantumRange << std::endl;
}
/** Outputs
-------
Channel 0 = 13107 of 65535
Channel 1 = 12079 of 65535
Channel 2 = 11308 of 65535
*/
没有看到您的代码,也没有理解您的最终目标是什么,我猜您真的只是想要 RGB 信息。如果是这种情况,Magick::Image.getColor
将起作用,
Magick::Image rose("rose:");
Magick::Color pixelColor = rose.pixelColor(5, 5);
std::cout << "Channel 0 = ";
std::cout << pixelColor.quantumRed() << " of " << QuantumRange << std::endl;
std::cout << "Channel 1 = ";
std::cout << pixelColor.quantumGreen() << " of " << QuantumRange << std::endl;
std::cout << "Channel 2 = ";
std::cout << pixelColor.quantumBlue() << " of " << QuantumRange << std::endl;
/** Outputs
-------
Channel 0 = 13107 of 65535
Channel 1 = 12079 of 65535
Channel 2 = 11308 of 65535
*/
但是!有时将图像数据导出为您已经使用的格式会更容易。例如,我可能只需要绿色值作为单点浮点列表。
Magick::Image rose("rose:");
Magick::PixelData pixelBlob(rose, "G", Magick::FloatPixel);
float * buffer = (float *)pixelBlob.data();
// ...
关于c++ - Magick++ 获取像素颜色。 pixelpacket 似乎不存在了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903963/
我正在尝试获取 jpg 图像中像素的颜色,我可以在网上找到的所有教程都说使用不再存在的 pixelpacket。通过谷歌搜索和搜索,我发现 getvirtualpixels 可能是新方法,但最新版本中
我是一名优秀的程序员,十分优秀!