Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Magick+调整图像大小+;_C++_Imagemagick_Magick++ - Fatal编程技术网

C++ 使用Magick+调整图像大小+;

C++ 使用Magick+调整图像大小+;,c++,imagemagick,magick++,C++,Imagemagick,Magick++,读取8位bmp并使用resize()调整其大小(缩小尺寸)会使其内部变为24位。Scale()保持深度,但当然看起来不太好,所以我更喜欢使用较慢的resize() 调用resize()后,深度()仍报告为8位,但不是(总颜色超过400.000) 我尝试将深度设置为8,但这并没有改变从24位写入磁盘到8位的输出。 还尝试写入指定格式(BMP)和8位的blob。它还输出24位 问题是如何在使用“调整大小”时保持相同的位深度 Magick::Image image; const int depth2

读取8位bmp并使用resize()调整其大小(缩小尺寸)会使其内部变为24位。Scale()保持深度,但当然看起来不太好,所以我更喜欢使用较慢的resize()

调用resize()后,深度()仍报告为8位,但不是(总颜色超过400.000)

我尝试将深度设置为8,但这并没有改变从24位写入磁盘到8位的输出。 还尝试写入指定格式(BMP)和8位的blob。它还输出24位

问题是如何在使用“调整大小”时保持相同的位深度

Magick::Image image;
const int depth2 = image.depth(); // 16
image.read("C:\\earth-huge.bmp"); // 8 bit. 64 colors
const int depth = image.depth(); // 8
int colors2 = image.totalColors(); // 64

image.filterType(Magick::FilterTypes::LanczosFilter);
image.resize(Magick::Geometry(1024, 512));

const int depth3 = image.depth(); // 8
int colors = image.totalColors(); // 409246

image.depth(8); // no effect

int colors3 = image.totalColors(); // 409246

image.write("C:\\earth-huge-magick++.bmp"); // outputs 24 bit bmp

image.quantizeDither(假);图像。量化颜色(256);image.quantize()结果表明,对于24位bmp,深度()始终为8,而不是24。image.imageInfo()不返回任何数据。SetImageInfo(imageInfo,0,异常);在克隆上不设置magick字符串。在我的类的安装或使用中可能会缺少什么?由于
resize
所做的插值,颜色的数量会增加<代码>比例
使用“简单比率算法”(最近邻),因此它只能减少颜色的数量。另外,
depth
指的是单个通道,“24位BMP”表示“8位RGB”插值可以提供更好的结果,但如果您不将图像的尺寸减少很多,您最终会得到更大的图像。因此,我只想保留原始格式,同时使用最好的过滤器进行缩放。使用quantize,我可以回到原始格式,但是我仍然需要弄清楚它是什么。我试图读出通道数,但不管怎样,我都没有得到imageInfo结果!?我的想法是使用2^(深度*通道)来量化颜色。有人能解释一下如何获得通道数,或者在调整大小后如何正确返回源格式吗?
image.quantizeDither(false);图像。量化颜色(256);image.quantize()结果表明,对于24位bmp,深度()始终为8,而不是24。image.imageInfo()不返回任何数据。SetImageInfo(imageInfo,0,异常);在克隆上不设置magick字符串。在我的类的安装或使用中可能会缺少什么?由于
resize
所做的插值,颜色的数量会增加<代码>比例
使用“简单比率算法”(最近邻),因此它只能减少颜色的数量。另外,
depth
指的是单个通道,“24位BMP”表示“8位RGB”插值可以提供更好的结果,但如果您不将图像的尺寸减少很多,您最终会得到更大的图像。因此,我只想保留原始格式,同时使用最好的过滤器进行缩放。使用quantize,我可以回到原始格式,但是我仍然需要弄清楚它是什么。我试图读出通道数,但不管怎样,我都没有得到imageInfo结果!?我的想法是使用2^(深度*通道)来量化颜色。有人能解释一下如何获得通道数,或者在调整大小后如何正确返回到源格式吗?