libpng 使用vs调用的原始包


使用VS调用libpng要用到的一些材料
资源截图
代码片段和文件信息
#define _CRT_SECURE_NO_DEPRECATE
#include 

#include 
#include 
#include 
#include 

/* A coloured pixel. */

typedef struct {
    uint8_t red;
    uint8_t green;
    uint8_t blue;
    uint8_t alpha;
} pixel_t;

/* A picture. */

typedef struct {
    pixel_t *pixels;
    size_t width;
    size_t height;
} bitmap_t;

/* Given “bitmap“ this returns the pixel of bitmap at the point
(“x“ “y“). */

static pixel_t * pixel_at(bitmap_t * bitmap int x int y)
{
    return bitmap->pixels + bitmap->width * y + x;
}

/* Write “bitmap“ to a PNG file specified by “path“; returns 0 on
success non-zero on error. */

static int save_png_to_file(bitmap_t *bitmap const char *path)
{
    FILE * fp;
    png_structp png_ptr = NULL;
    png_infop info_ptr = NULL;
    size_t x y;
    png_byte ** row_pointers = NULL;
    /* “status“ contains the return value of this function. At first
    it is set to a value which means ‘failure‘. When the routine
    has finished its work it is set to a value which means
    ‘success‘. */
    int status = -1;
    /* The following number is set by trial and error only. I cannot
    see where it it is documented in the libpng manual.
    */
    int pixel_size = 4;
    int depth = 8;

    fp = fopen(path “wb“);
    if (!fp) {
        goto fopen_failed;
    }

    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING NULL NULL NULL);
    if (png_ptr == NULL) {
        goto png_create_write_struct_failed;
    }

    info_ptr = png_create_info_struct(png_ptr);
    if (info_ptr == NULL) {
        goto png_create_info_struct_failed;
    }

    /* Set up error handling. */

    if (setjmp(png_jmpbuf(png_ptr))) {
        goto png_failure;
    }

    /* Set image attributes. */

    png_set_IHDR(png_ptr
        info_ptr
        bitmap->width
        bitmap->height
        depth
        PNG_COLOR_TYPE_RGBA
        PNG_INTERLACE_NONE
        PNG_COMPRESSION_TYPE_DEFAULT
        PNG_FILTER_TYPE_DEFAULT);

    /* Initialize rows of PNG. */

    row_pointers = png_malloc(png_ptr bitmap->height * sizeof(png_byte *));
    for (y = 0; y < bitmap->height; ++y) {
        png_byte *row =
            png_malloc(png_ptr sizeof(uint8_t) * bitmap->width * pixel_size);
        row_pointers[y] = row;
        for (x = 0; x < bitmap->width; ++x) {
            pixel_t * pixel = pixel_at(bitmap x y);
            *row++ = pixel->red;
            *row++ = pixel->green;
            *row++ = pixel->blue;
            *row++ = pixel->alpha;
        }
    }

    /* Write the image data to “fp“. */

    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);

    /* The routine has successfully written the file so we set
    “status“ to a value which indicates success. */

    status = 0;

    for (y = 0; 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-01-04 13:43  libpngcsdn
     文件     1308812  2017-01-04 10:08  libpngcsdnlpng1627.zip
     文件        4245  2017-01-04 13:43  libpngcsdnsourc.c
     文件      694552  2017-01-04 10:15  libpngcsdnzlib128.zip

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)