gpt4 book ai didi

png - 16位灰度png

转载 作者:行者123 更新时间:2023-12-04 04:07:16 25 4
gpt4 key购买 nike

我正在尝试编写(使用libpng)一个16位灰度图像,其中每个点颜色等于其坐标之和。以下代码应产生一个16位的PNG,但是产生一个类似于this的8位。为什么?

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

void save_png(FILE* fp, long int size)
{
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
size_t x, y;
png_bytepp row_pointers;

png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr == NULL) {
return ;
}

info_ptr = png_create_info_struct(png_ptr);
if (info_ptr == NULL) {
png_destroy_write_struct(&png_ptr, NULL);
return ;
}

if (setjmp(png_jmpbuf(png_ptr))) {
png_destroy_write_struct(&png_ptr, &info_ptr);
return ;
}

png_set_IHDR(png_ptr, info_ptr,
size, size, // width and height
16, // bit depth
PNG_COLOR_TYPE_GRAY, // color type
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);

/* Initialize rows of PNG. */
row_pointers = (png_bytepp)png_malloc(png_ptr,
size*png_sizeof(png_bytep));

for (int i=0; i<size; i++)
row_pointers[i]=NULL;

for (int i=0; i<size; i++)
row_pointers[i]=png_malloc(png_ptr, size*2);

//set row data
for (y = 0; y < size; ++y) {
png_bytep row = row_pointers[y];
for (x = 0; x < size; ++x) {
short color = x+y;
*row++ = (png_byte)(color & 0xFF);
*row++ = (png_byte)(color >> 8);
}
}

/* Actually write the image data. */
png_init_io(png_ptr, fp);
png_set_rows(png_ptr, info_ptr, row_pointers);
png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
//png_write_image(png_ptr, row_pointers);

/* Cleanup. */
for (y = 0; y < size; y++) {
png_free(png_ptr, row_pointers[y]);
}
png_free(png_ptr, row_pointers);
png_destroy_write_struct(&png_ptr, &info_ptr);
}

int main()
{
FILE* f;
if((f=fopen("test.png", "wb"))!=NULL)
{
save_png(f, 257);

fclose(f);
}
return 0;
}

最佳答案

链接到的图像在Windows 7的“属性”中显示为“16位”。我猜您只是看到各种应用程序都回落到了转换为8位的显示效果(我想),这是可以预期的,因为大多数显示设备都不支持16位。

关于png - 16位灰度png,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818206/

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