16位灰度PNG

2024-02-05

我正在尝试编写(使用 libpng)一个 16 位灰度图像,其中每个点颜色等于其坐标之和。以下代码应生成 16 位 PNG,但会生成 8 位,例如this http://dl.dropbox.com/u/15187698/test.png. Why?

#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 位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

16位灰度PNG 的相关文章

  • CSS 灰度动画

    我有一些CSS来将我的图像更改为灰度 还有一些用于firefox的svg img grayscale filter grayscale 100 webkit filter grayscale 100 moz filter grayscale
  • Android:将imageview转换为位图,转换为灰度,位图转换为imageview

    当我编译此代码时 我没有在 Eclipse 上收到任何警告 但是当我在设备或模拟器上运行它时 该程序被迫关闭 public class MainActivity extends Activity ImageView img Button b
  • 通过Windows中的命令行工具合并两个png?

    我正在寻找一个可以通过命令行 Windows 7 使用的工具来合并两个相同大小的 png 到目前为止 我在搜索方面运气不佳 因为我见过的大多数工具都是相当笨重的应用程序 它们似乎不针对简单的操作 我想用覆盖图像中的非透明像素覆盖不透明基本图
  • 将 Java 2d 图形图像保存为 .png 文件

    我正在绘制模拟生成的信息的图形表示 我显示了图表 但我遇到的问题是如何将其保存为 png 当它保存 png 时 文件是全黑的 所以它不是保存我的图形 而是创建一些空白 png 文件 问题是我很难弄清楚如何转换为 BufferedImage
  • Java将GIF图像转换为PNG格式

    我必须构建一个 Java servlet 它接收图像并返回转换为 PNG 格式的图像 我怎样才能实现这个目标 正如一些示例所示 转换并不是指更改文件扩展名 提前致谢 试试这个 package demo import javax imagei
  • 无效的 PNG 图像文件:iDOT 未指向有效的 IDAT 块

    我的应用程序中有一些 HTML 内容页面 我使用 UIWebView 来显示它们 其中一些页面包含 PNG 图像 该图像在 xcode 的调试控制台中生成以下消息 ImageIO PNG invalid PNG file iDOT does
  • Python numpy 减法没有负数(4-6 给出 254)

    我想减去2gray人脸彼此之间可以看到差异 但我遇到了一个问题 例如减去 4 6 给出 254 而不是 2 或差值 2 print type face
  • C# - 如何更改 PNG 质量或颜色深度

    我应该编写一个程序 从用户那里获取一些 PNG 图像 进行一些简单的编辑 例如旋转 并将它们保存在 JAR 文件中 以便它可以使用图像作为资源 问题是 当我打开一个 80kb 图像 然后用 C 保存它时 我会得到一个具有相同质量但占用 13
  • PIL:将模式“I”的图像转换为“RGB”会产生全白图像

    据我所知 这个问题末尾的图像是模式 I 的 PNG 它代表 索引 我正在尝试创建一个缩略图 并使用 PIL 将其保存为 JPG 然而 我是否离开了mode独自一人 PIL 不会让我错误地调整它的大小unable to generate th
  • 链接具有不兼容依赖项的库

    我正在开发一个需要两个第三方库的 C 项目 libfoo so and libbar so 我的操作系统是Linux libfoo so动态链接到 libpng14 so 14 1 4 8 EDIT 1 libbar so似乎静态链接到 未
  • 由于图像,应用程序尺寸较大。如何压缩 .PNG 图像?

    我正在开发一个应用程序 它有很多图像需要处理 因此我的应用程序的大小变得非常大 我想压缩或类似的东西来减小应用程序的大小 任何想法 png 放置在res drawable are 自动优化 http developer android co
  • 如何在单个 HTML / PHP 文件中嵌入图像?

    我正在创建一个轻量级的单文件数据库管理工具 我想将一些小图标与它捆绑在一起 在 HTML PHP 文件中嵌入图像的最佳方法是什么 我知道一种使用 PHP 的方法 我可以使用 GET 参数调用同一个文件 该参数将输出具有正确标头的硬编码二进制
  • Visual Studio 2013 和 libpng [重复]

    这个问题在这里已经有答案了 我正在尝试使用 VS2013 在 C 中使用 libpng 编写一个简单的 PNG 文件 我从 Nuget 安装了 libpng 并包含了 png h 但无法编译 我得到这个作为我的输出 1 gt main ob
  • Python:将 GIF 帧转换为 PNG

    我对 python 很陌生 试图用它来将 GIF 的帧分割成 PNG 图像 Using this GIF http www videogamesprites net FinalFantasy1 Party Before Fighter Fr
  • 使用 zlib 解压缩 PNG

    如何使用 zlib 库解压缩 PNG 文件 我需要在 gcc 编译器下使用 C 读取 PNG 文件 为什么不使用libpng http www libpng org pub png libpng html PNG 文件格式相当简单 但有许多
  • 如何使用 imagemagick 从命令行将灰度 png 图像转换为 RGB

    我正在尝试使用以下命令将 png 灰度图像转换为 RGB png 图像 convert HopeLoveJoy png size 1x1 fill rgba 0 1 2 0 draw color 511 511 point out test
  • 是否有适用于 IE6 的 JavaScript PNG 修复程序允许 CSS 背景定位?

    我已经看到了一些允许 PNG 图像在 Internet Explorer 6 中具有透明度的修复 但我还没有找到一个也允许您在 CSS 中设置背景位置的修复 如果你使用精灵 那就会破坏交易 我求助于使用 GIF 质量不高 根本不使用透明图像
  • 从 PNG 图像中提取元数据

    我正在尝试从 PNG 图像格式中提取元数据 我正在使用这个库 http code google com p metadata extractor http code google com p metadata extractor 尽管它声称
  • 图像/png 响应的原始响应

    我收到一个带有原始响应的响应主体 它应该代表一个 png 图像 我的问题是如何解码它并使其可渲染 PS 当我使用邮递员来测试这个时 我意识到邮递员可以渲染这个原始字符串 我想知道它是如何做到的 PNG IHDR X PPHYs o d ID
  • 以 png 格式剪辑幻灯片 (Delphi 2010)

    I have a filmstrip of images in png format like this 我想知道如何剪辑每个图像并将这些图像放入 TImageList 控件中 并始终保留透明度 EDIT 是的 在设计时 RRUZ 提到的技

随机推荐