首页 > 解决方案 > 如何使用 libpng 库获取 16 位深度的灰度图像的像素值?

问题描述

我有一个 16 位深度的灰度图像。我想使用 libpng 库获取图像的像素值。但是,我的程序的输出是该图像的所有像素值都在 0 到 255 之间。我用 ImageJ 软件检查了该图像以及它们在 0 到 65535 之间的事实。我不知道我哪里出错了。这是我的代码。

#include <stdio.h>
#include <png.h>

int main(void) {
    FILE *fp = fopen("sample.png", "r");

    png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    png_infop png_info = png_create_info_struct(png_ptr);

    png_init_io(png_ptr, fp);

    png_bytepp rows;

    png_read_png(png_ptr, png_info, PNG_TRANSFORM_IDENTITY, NULL);

    int WIDTH      = png_get_image_width(png_ptr, png_info);
    int HEIGHT     = png_get_image_height(png_ptr, png_info);

    rows = png_get_rows(png_ptr, png_info);

    for (int h = 0; h < HEIGHT; h++) {
        for (int w = 0; w < WIDTH; w++) {
            printf("%d ", rows[h][w]);
        }   
        printf("\n");
    }
    return 0;
}

请帮我。非常感谢。

标签: cimageimage-processinglibpng

解决方案


如果您在以下几行中更改类型,它会起作用:

unsigned short **rows;

rows = (unsigned short**)png_get_rows(png_ptr, png_info);

推荐阅读