使用libpng将转换设置为灰度
Setting transformations to greyscale with libpng
我正在使用libpng读取图像。图像本身有4个通道(rgba),通道有8位。我想把它读成灰度图像,最好是黑白(每像素1位),但即使是每像素8位也会有所改进。
为此,我编写了如下函数:
extern "C" void cuttingStream::set_image_transformations_in_grayscale( pngImageInfo* info,pngDataStructures* png)
{
//alpha channel is removed
if (info->color_type & PNG_COLOR_MASK_ALPHA != PNG_COLOR_TYPE_GRAY)
png_set_strip_alpha(png->png_struct_field);
//switch to rgb is completed
if (info->color_type & PNG_COLOR_MASK_COLOR != PNG_COLOR_TYPE_GRAY)
png_set_rgb_to_gray(png->png_struct_field,1,NULL,NULL);
png_read_update_info(png->png_struct_field, png->png_info_field);
info -> rowbytes = png_get_rowbytes(png->png_struct_field, png->png_info_field);
//bits per CHANNEL! note: not per pixel!
info->bitdepth = png_get_bit_depth(png->png_struct_field, png->png_info_field);
//Number of channels
info->channels = png_get_channels(png->png_struct_field, png->png_info_field);
//Color type. (RGB, RGBA, Luminance, luminance alpha... palette... etc)
info->color_type = png_get_color_type(png->png_struct_field, png->png_info_field);
}
pngDataStructures是我自己的结构,它包含png_structp、png_infop和指向自定义读取函数的指针。pngImageInfo包含一些我感兴趣的图像信息,正如代码中所示。
问题是,在代码执行之后,通道的数量不会改变。如何解决这个问题?
运算符优先级问题:
//alpha通道已删除if((信息->color_type&PNG_color_MASK_ALPHA)!=PNG_COLOR_TYPE_GRAY)
运算符&小于运算符=
相关文章:
- 在 C++ 中将 RGB 更改为灰度
- OpenCV - 如何在灰度图像上应用 Kmeans?
- OpenCV - 如何将灰度转换为彩色(CV_8UC3)?
- C++灰度图像处理
- 如何显示具有 opengl 纹理的灰度图像
- C++ Gdi+将图像转换为灰度
- 将 BMP 图像转换为灰度
- 如何使用Canny到32位灰度
- 颜色到灰度转换
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 使用 SSE 以最快的速度缩小 8 位灰度图像
- 使用 OpenCV 和 C++将 16 位灰度图像更改为彩色图像
- 有没有办法使用 glDrawPixel 渲染单通道灰度图像?
- goodFeaturesToTrack() 只适用于灰度?
- 如何在OpenCV中减去两个不同尺寸的图像和灰度图像
- 使用 ImageMagick 从像素强度数组创建灰度图像时遇到问题
- 如何将图像转换为灰度 opengl c++
- 将高斯模糊应用于灰度图像
- C++:灰度位图标题和实时绘画+opencv图像处理
- 使用libpng将转换设置为灰度