gpt4 book ai didi

c++ - Magick++ 获取像素颜色。 pixelpacket 似乎不存在了

转载 作者:行者123 更新时间:2023-11-28 02:04:56 25 4
gpt4 key购买 nike

我正在尝试获取 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com