亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? writepng.c

?? Borland C++BuilderT 6 Developer s Guide
?? C
字號:
/*---------------------------------------------------------------------------

   wpng - simple PNG-writing program                             writepng.c

  ---------------------------------------------------------------------------

      Copyright (c) 1998-2000 Greg Roelofs.  All rights reserved.

      This software is provided "as is," without warranty of any kind,
      express or implied.  In no event shall the author or contributors
      be held liable for any damages arising in any way from the use of
      this software.

      Permission is granted to anyone to use this software for any purpose,
      including commercial applications, and to alter it and redistribute
      it freely, subject to the following restrictions:

      1. Redistributions of source code must retain the above copyright
         notice, disclaimer, and this list of conditions.
      2. Redistributions in binary form must reproduce the above copyright
         notice, disclaimer, and this list of conditions in the documenta-
         tion and/or other materials provided with the distribution.
      3. All advertising materials mentioning features or use of this
         software must display the following acknowledgment:

            This product includes software developed by Greg Roelofs
            and contributors for the book, "PNG: The Definitive Guide,"
            published by O'Reilly and Associates.

  ---------------------------------------------------------------------------*/


#include <stdlib.h>     /* for exit() prototype */

#include "png.h"        /* libpng header; includes zlib.h and setjmp.h */
#include "writepng.h"   /* typedefs, common macros, public prototypes */


/* local prototype */

static void writepng_error_handler(png_structp png_ptr, png_const_charp msg);



void writepng_version_info(void)
{
  fprintf(stderr, "   Compiled with libpng %s; using libpng %s.\n",
    PNG_LIBPNG_VER_STRING, png_libpng_ver);
  fprintf(stderr, "   Compiled with zlib %s; using zlib %s.\n",
    ZLIB_VERSION, zlib_version);
}




/* returns 0 for success, 2 for libpng problem, 4 for out of memory, 11 for
 *  unexpected pnmtype; note that outfile might be stdout */

int writepng_init(mainprog_info *mainprog_ptr)
{
    png_structp  png_ptr;       /* note:  temporary variables! */
    png_infop  info_ptr;
    int color_type, interlace_type;


    /* could also replace libpng warning-handler (final NULL), but no need: */

    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, mainprog_ptr,
      writepng_error_handler, NULL);
    if (!png_ptr)
        return 4;   /* out of memory */

    info_ptr = png_create_info_struct(png_ptr);
    if (!info_ptr) {
        png_destroy_write_struct(&png_ptr, NULL);
        return 4;   /* out of memory */
    }


    /* setjmp() must be called in every function that calls a PNG-writing
     * libpng function, unless an alternate error handler was installed--
     * but compatible error handlers must either use longjmp() themselves
     * (as in this program) or exit immediately, so here we go: */

    if (setjmp(mainprog_ptr->jmpbuf)) {
        png_destroy_write_struct(&png_ptr, &info_ptr);
        return 2;
    }


    /* make sure outfile is (re)opened in BINARY mode */

    png_init_io(png_ptr, mainprog_ptr->outfile);


    /* set the compression levels--in general, always want to leave filtering
     * turned on (except for palette images) and allow all of the filters,
     * which is the default; want 32K zlib window, unless entire image buffer
     * is 16K or smaller (unknown here)--also the default; usually want max
     * compression (NOT the default); and remaining compression flags should
     * be left alone */

    png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
/*
    >> this is default for no filtering; Z_FILTERED is default otherwise:
    png_set_compression_strategy(png_ptr, Z_DEFAULT_STRATEGY);
    >> these are all defaults:
    png_set_compression_mem_level(png_ptr, 8);
    png_set_compression_window_bits(png_ptr, 15);
    png_set_compression_method(png_ptr, 8);
 */


    /* set the image parameters appropriately */

    if (mainprog_ptr->pnmtype == 5)
        color_type = PNG_COLOR_TYPE_GRAY;
    else if (mainprog_ptr->pnmtype == 6)
        color_type = PNG_COLOR_TYPE_RGB;
    else if (mainprog_ptr->pnmtype == 8)
        color_type = PNG_COLOR_TYPE_RGB_ALPHA;
    else {
        png_destroy_write_struct(&png_ptr, &info_ptr);
        return 11;
    }

    interlace_type = mainprog_ptr->interlaced? PNG_INTERLACE_ADAM7 :
                                               PNG_INTERLACE_NONE;

    png_set_IHDR(png_ptr, info_ptr, mainprog_ptr->width, mainprog_ptr->height,
      mainprog_ptr->sample_depth, color_type, interlace_type,
      PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);

    if (mainprog_ptr->gamma > 0.0)
        png_set_gAMA(png_ptr, info_ptr, mainprog_ptr->gamma);

    if (mainprog_ptr->have_bg) {   /* we know it's RGBA, not gray+alpha */
        png_color_16  background;

        background.red = mainprog_ptr->bg_red;
        background.green = mainprog_ptr->bg_green;
        background.blue = mainprog_ptr->bg_blue;
        png_set_bKGD(png_ptr, info_ptr, &background);
    }

    if (mainprog_ptr->have_time) {
        png_time  modtime;

        png_convert_from_time_t(&modtime, mainprog_ptr->modtime);
        png_set_tIME(png_ptr, info_ptr, &modtime);
    }

    if (mainprog_ptr->have_text) {
        png_text  text[6];
        int  num_text = 0;

        if (mainprog_ptr->have_text & TEXT_TITLE) {
            text[num_text].compression = PNG_TEXT_COMPRESSION_NONE;
            text[num_text].key = "Title";
            text[num_text].text = mainprog_ptr->title;
            ++num_text;
        }
        if (mainprog_ptr->have_text & TEXT_AUTHOR) {
            text[num_text].compression = PNG_TEXT_COMPRESSION_NONE;
            text[num_text].key = "Author";
            text[num_text].text = mainprog_ptr->author;
            ++num_text;
        }
        if (mainprog_ptr->have_text & TEXT_DESC) {
            text[num_text].compression = PNG_TEXT_COMPRESSION_NONE;
            text[num_text].key = "Description";
            text[num_text].text = mainprog_ptr->desc;
            ++num_text;
        }
        if (mainprog_ptr->have_text & TEXT_COPY) {
            text[num_text].compression = PNG_TEXT_COMPRESSION_NONE;
            text[num_text].key = "Copyright";
            text[num_text].text = mainprog_ptr->copyright;
            ++num_text;
        }
        if (mainprog_ptr->have_text & TEXT_EMAIL) {
            text[num_text].compression = PNG_TEXT_COMPRESSION_NONE;
            text[num_text].key = "E-mail";
            text[num_text].text = mainprog_ptr->email;
            ++num_text;
        }
        if (mainprog_ptr->have_text & TEXT_URL) {
            text[num_text].compression = PNG_TEXT_COMPRESSION_NONE;
            text[num_text].key = "URL";
            text[num_text].text = mainprog_ptr->url;
            ++num_text;
        }
        png_set_text(png_ptr, info_ptr, text, num_text);
    }


    /* write all chunks up to (but not including) first IDAT */

    png_write_info(png_ptr, info_ptr);


    /* if we wanted to write any more text info *after* the image data, we
     * would set up text struct(s) here and call png_set_text() again, with
     * just the new data; png_set_tIME() could also go here, but it would
     * have no effect since we already called it above (only one tIME chunk
     * allowed) */


    /* set up the transformations:  for now, just pack low-bit-depth pixels
     * into bytes (one, two or four pixels per byte) */

    png_set_packing(png_ptr);
/*  png_set_shift(png_ptr, &sig_bit);  to scale low-bit-depth values */


    /* make sure we save our pointers for use in writepng_encode_image() */

    mainprog_ptr->png_ptr = png_ptr;
    mainprog_ptr->info_ptr = info_ptr;


    /* OK, that's all we need to do for now; return happy */

    return 0;
}





/* returns 0 for success, 2 for libpng (longjmp) problem */

int writepng_encode_image(mainprog_info *mainprog_ptr)
{
    png_structp png_ptr = (png_structp)mainprog_ptr->png_ptr;
    png_infop info_ptr = (png_infop)mainprog_ptr->info_ptr;


    /* as always, setjmp() must be called in every function that calls a
     * PNG-writing libpng function */

    if (setjmp(mainprog_ptr->jmpbuf)) {
        png_destroy_write_struct(&png_ptr, &info_ptr);
        mainprog_ptr->png_ptr = NULL;
        mainprog_ptr->info_ptr = NULL;
        return 2;
    }


    /* and now we just write the whole image; libpng takes care of interlacing
     * for us */

    png_write_image(png_ptr, mainprog_ptr->row_pointers);


    /* since that's it, we also close out the end of the PNG file now--if we
     * had any text or time info to write after the IDATs, second argument
     * would be info_ptr, but we optimize slightly by sending NULL pointer: */

    png_write_end(png_ptr, NULL);

    return 0;
}





/* returns 0 if succeeds, 2 if libpng problem */

int writepng_encode_row(mainprog_info *mainprog_ptr)  /* NON-interlaced only! */
{
    png_structp png_ptr = (png_structp)mainprog_ptr->png_ptr;
    png_infop info_ptr = (png_infop)mainprog_ptr->info_ptr;


    /* as always, setjmp() must be called in every function that calls a
     * PNG-writing libpng function */

    if (setjmp(mainprog_ptr->jmpbuf)) {
        png_destroy_write_struct(&png_ptr, &info_ptr);
        mainprog_ptr->png_ptr = NULL;
        mainprog_ptr->info_ptr = NULL;
        return 2;
    }


    /* image_data points at our one row of image data */

    png_write_row(png_ptr, mainprog_ptr->image_data);

    return 0;
}





/* returns 0 if succeeds, 2 if libpng problem */

int writepng_encode_finish(mainprog_info *mainprog_ptr)   /* NON-interlaced! */
{
    png_structp png_ptr = (png_structp)mainprog_ptr->png_ptr;
    png_infop info_ptr = (png_infop)mainprog_ptr->info_ptr;


    /* as always, setjmp() must be called in every function that calls a
     * PNG-writing libpng function */

    if (setjmp(mainprog_ptr->jmpbuf)) {
        png_destroy_write_struct(&png_ptr, &info_ptr);
        mainprog_ptr->png_ptr = NULL;
        mainprog_ptr->info_ptr = NULL;
        return 2;
    }


    /* close out PNG file; if we had any text or time info to write after
     * the IDATs, second argument would be info_ptr: */

    png_write_end(png_ptr, NULL);

    return 0;
}





void writepng_cleanup(mainprog_info *mainprog_ptr)
{
    png_structp png_ptr = (png_structp)mainprog_ptr->png_ptr;
    png_infop info_ptr = (png_infop)mainprog_ptr->info_ptr;

    if (png_ptr && info_ptr)
        png_destroy_write_struct(&png_ptr, &info_ptr);
}





static void writepng_error_handler(png_structp png_ptr, png_const_charp msg)
{
    mainprog_info  *mainprog_ptr;

    /* This function, aside from the extra step of retrieving the "error
     * pointer" (below) and the fact that it exists within the application
     * rather than within libpng, is essentially identical to libpng's
     * default error handler.  The second point is critical:  since both
     * setjmp() and longjmp() are called from the same code, they are
     * guaranteed to have compatible notions of how big a jmp_buf is,
     * regardless of whether _BSD_SOURCE or anything else has (or has not)
     * been defined. */

    fprintf(stderr, "writepng libpng error: %s\n", msg);
    fflush(stderr);

    mainprog_ptr = png_get_error_ptr(png_ptr);
    if (mainprog_ptr == NULL) {         /* we are completely hosed now */
        fprintf(stderr,
          "writepng severe error:  jmpbuf not recoverable; terminating.\n");
        fflush(stderr);
        exit(99);
    }

    longjmp(mainprog_ptr->jmpbuf, 1);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕的久久| 亚洲国产成人在线| 99久久精品国产导航| 美女视频黄频大全不卡视频在线播放| 日韩一区中文字幕| 国产精品美女久久久久久| 国产欧美日韩在线看| 国产欧美1区2区3区| 国产亚洲精品超碰| 国产精品网站在线| 中文字幕一区二区三区视频| 中文字幕在线播放不卡一区| 亚洲免费在线视频一区 二区| 日韩毛片视频在线看| 一区二区在线免费| 亚洲成人精品影院| 全国精品久久少妇| 精品一区二区在线观看| 国内成人自拍视频| 白白色 亚洲乱淫| 日本道精品一区二区三区| 在线观看欧美日本| 日韩亚洲欧美中文三级| 欧美mv日韩mv| 一色桃子久久精品亚洲| 亚洲国产日韩在线一区模特| 日本亚洲欧美天堂免费| 国产久卡久卡久卡久卡视频精品| 国产成人精品aa毛片| 色综合视频在线观看| 欧美日韩视频第一区| 精品少妇一区二区三区视频免付费| 欧美tk丨vk视频| 国产精品久线观看视频| 亚洲成人久久影院| 国产精品白丝av| 欧美性色黄大片| 国产日韩欧美精品一区| 亚洲精品视频在线看| 日韩av在线播放中文字幕| 高清不卡在线观看av| 欧美日韩一二三| 中文一区一区三区高中清不卡| 亚洲一区av在线| 国产成人啪免费观看软件| 欧美三级视频在线观看| 久久精品亚洲麻豆av一区二区| 亚洲狼人国产精品| 国产综合色在线| 欧美日韩精品免费| 国产精品美日韩| 狠狠色丁香九九婷婷综合五月| 色综合视频在线观看| 久久久精品中文字幕麻豆发布| 亚洲国产综合色| 波多野结衣精品在线| 欧美精品一区二区在线播放| 亚洲国产综合在线| 99综合影院在线| 久久影院电视剧免费观看| 图片区小说区区亚洲影院| 91在线观看美女| 国产欧美精品在线观看| 久久电影网站中文字幕| 欧美日韩成人在线一区| 亚洲自拍偷拍图区| 99国内精品久久| 中文字幕亚洲在| 成人av先锋影音| 久久久精品2019中文字幕之3| 日韩电影免费在线| 欧美日韩极品在线观看一区| 亚洲人精品一区| 色综合天天综合网国产成人综合天| 国产亚洲一区二区在线观看| 国产中文字幕精品| 精品国产免费一区二区三区香蕉| 首页欧美精品中文字幕| 欧美伊人精品成人久久综合97| 亚洲色图视频网站| 色婷婷综合视频在线观看| 国产精品久久久久久久久久久免费看 | 精品一二线国产| 3d成人动漫网站| 亚洲国产三级在线| 制服丝袜激情欧洲亚洲| 视频一区视频二区中文| 日韩一级片在线播放| 美女高潮久久久| 欧美精品一区二区高清在线观看| 激情综合网av| 亚洲国产精品黑人久久久| 成人天堂资源www在线| 国产精品色哟哟网站| 波多野结衣欧美| 亚洲一区在线视频观看| 欧美剧情电影在线观看完整版免费励志电影 | 日韩精品中文字幕在线一区| 国产美女av一区二区三区| 久久婷婷久久一区二区三区| 成人av网站在线观看| 亚洲激情男女视频| 欧美一卡在线观看| 极品少妇一区二区| 国产精品久久久久久久久搜平片 | 成人精品gif动图一区| 国产精品久久久久久久浪潮网站| 色哟哟一区二区| 日本不卡123| 中文字幕欧美一| 91精品在线一区二区| 国产成+人+日韩+欧美+亚洲| 自拍偷拍欧美激情| 欧美一区二区三区色| 粉嫩av一区二区三区| 性做久久久久久久久| 国产亚洲女人久久久久毛片| 欧美日韩激情一区二区| 国产a视频精品免费观看| 亚洲一区二区三区视频在线播放| 日韩一区二区麻豆国产| 不卡的av在线| 精品写真视频在线观看| 一区二区三区免费观看| 欧美大片一区二区| 在线亚洲欧美专区二区| 国产精品亚洲一区二区三区在线| 亚洲激情自拍偷拍| 日韩一区在线看| 欧美不卡在线视频| 欧美午夜一区二区三区免费大片| 久久精品免费观看| 亚洲图片一区二区| 亚洲人成网站在线| 中文字幕免费观看一区| 精品美女在线播放| 欧美精品vⅰdeose4hd| 99精品视频在线免费观看| 色哟哟国产精品免费观看| 国产成人鲁色资源国产91色综| 日本欧美加勒比视频| 亚洲第一会所有码转帖| 亚洲欧洲中文日韩久久av乱码| 久久久精品中文字幕麻豆发布| 日韩视频123| 在线电影一区二区三区| 欧美午夜片在线观看| 91免费版在线| 91麻豆福利精品推荐| av亚洲精华国产精华精华| 国产麻豆日韩欧美久久| 韩国av一区二区三区四区| 看片网站欧美日韩| 免费日韩伦理电影| 日韩精品电影在线| 奇米777欧美一区二区| 偷拍日韩校园综合在线| 亚洲午夜电影在线观看| 亚洲午夜影视影院在线观看| 亚洲另类色综合网站| 亚洲精品日日夜夜| 一区二区三区色| 一区二区三区蜜桃| 亚洲成人精品一区二区| 日韩黄色免费电影| 久久99精品国产91久久来源| 久久99久久99| 成人一区在线看| 91色porny蝌蚪| 欧美日韩一区三区| 欧美一区在线视频| 精品久久久久久无| 欧美激情一区二区| 一区二区在线免费| 日本不卡一区二区三区高清视频| 麻豆视频一区二区| 成人久久视频在线观看| 日本道免费精品一区二区三区| 欧美精品在线一区二区| 精品国产免费人成在线观看| 国产精品天干天干在线综合| 亚洲欧美国产高清| 日本怡春院一区二区| 国产精品99久久久久久有的能看 | 色综合久久综合网欧美综合网| 欧美无砖砖区免费| 久久久综合视频| 依依成人综合视频| 国产一区三区三区| 在线一区二区三区四区| 精品粉嫩超白一线天av| 亚洲男女毛片无遮挡| 精品一区二区精品| 在线视频欧美区| 国产欧美精品区一区二区三区| 亚洲成人免费av| 99综合影院在线| 久久久高清一区二区三区| 亚洲成在人线在线播放| 国产成人精品免费在线|