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

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

?? png.c

?? miniucgui1.30版本的源碼
?? C
字號:
/*** $Id: png.c,v 1.10 2003/09/04 06:02:53 weiym Exp $** ** png.c: Low-level PNG file read routines.  ** ** Copyright (C) 2003 Feynman Software.** Copyright (C) 2001 ~ 2002 Wei Yongming.**** Current maintainer: Wei Yongming** Originally by Zhang Yunfan **** Create date: 2001/01/10*//*** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <unistd.h>#include "common.h"#include "gdi.h"#ifdef _PNG_FILE_SUPPORT#include <png.h>typedef unsigned char uch;typedef unsigned long ulg;static uch *readpng_get_image( png_structp png_ptr, png_infop info_ptr,     int *pChannels, ulg *pRowbytes);static int readpng_init (png_structpp png_pptr, png_infopp info_pptr,     MG_RWops* src, ulg* width, ulg* height, int* bitdepth, int* colortype);static void readpng_cleanup(png_structp png_ptr, png_infop info_ptr,    uch *image_data,int free_image_data);static uch *readpng_get_image (png_structp png_ptr, png_infop info_ptr,     int *pChannels, ulg *pRowbytes){    png_uint_32 i, rowbytes;    png_bytepp row_pointers = NULL;    uch* image_data;    /* setjmp() must be called in every function that calls a PNG-reading     * libpng function */    if (setjmp(png_ptr->jmpbuf)) {        png_destroy_read_struct(&png_ptr, &info_ptr, NULL);        return NULL;    }    /* all transformations have been registered; now update info_ptr data,     * get rowbytes and channels, and allocate image memory */    png_read_update_info (png_ptr, info_ptr);    *pRowbytes = rowbytes = png_get_rowbytes (png_ptr, info_ptr);    *pChannels = (int)png_get_channels (png_ptr, info_ptr);    if ((image_data = (uch *)malloc (rowbytes * info_ptr->height)) == NULL) {        png_destroy_read_struct (&png_ptr, &info_ptr, NULL);        return NULL;    }    if ((row_pointers = (png_bytepp)malloc (info_ptr->height*sizeof(png_bytep))) == NULL) {        png_destroy_read_struct (&png_ptr, &info_ptr, NULL);        free (image_data);        image_data = NULL;        return NULL;    }    /* set the individual row_pointers to point at the correct offsets */    for (i = 0;  i < info_ptr->height;  ++i)        row_pointers[i] = image_data + i*rowbytes;    /* now we can go ahead and just read the whole image */    png_read_image (png_ptr, row_pointers);        /* and we're done!  (png_read_end() can be omitted if no processing of     * post-IDAT text/time/etc. is desired) */    free (row_pointers);    row_pointers = NULL;    png_read_end (png_ptr, NULL);    return image_data;}static void my_read_data_fn (png_structp png_ptr, png_bytep data, png_size_t length){   png_size_t check;   /* fread() returns 0 on error, so it is OK to store this in a png_size_t    * instead of an int, which is what fread() actually returns.    */   check = (png_size_t)MGUI_RWread ((MG_RWops*)png_ptr->io_ptr, data, (png_size_t)1, length);   if (check != length)      png_error(png_ptr, "Read Error");}#define _PNG_SIG_ERROR  1#define _PNG_MEM_ALLOC  2#define _PNG_INIT_OK    0static int readpng_init (png_structpp png_pptr, png_infopp info_pptr, MG_RWops* src,     ulg* width, ulg* height, int* bitdepth, int* colortype){    uch sig[9];    MGUI_RWread (src, sig, 8, 1);    if (!png_check_sig (sig, 8)) {#ifdef PNG_DEBUG        sig[8] = '\0';        fprintf (stderr, "%s: check error!\n", sig);#endif        return _PNG_SIG_ERROR;    } else {#ifdef PNG_DEBUG        sig[8]='\0';        fprintf (stderr, "png sig is %s.\n", sig);#endif    }    *png_pptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL );    if (!*png_pptr){        return _PNG_MEM_ALLOC;    }    *info_pptr = png_create_info_struct ( *png_pptr );    if ( !*info_pptr ){        png_destroy_read_struct (png_pptr, NULL,NULL);        return _PNG_MEM_ALLOC;    }    if ( setjmp ( (*png_pptr)->jmpbuf ) ) {        png_destroy_read_struct (png_pptr, info_pptr, NULL );        return _PNG_MEM_ALLOC;    }    png_set_read_fn (*png_pptr, (void*)src, my_read_data_fn);    png_set_sig_bytes ( *png_pptr, 8 );    png_read_info ( *png_pptr, *info_pptr );    png_get_IHDR ( *png_pptr, *info_pptr, width, height, bitdepth,         colortype, NULL, NULL, NULL );    return _PNG_INIT_OK;}        static void readpng_cleanup (png_structp png_ptr, png_infop info_ptr,    uch *image_data, int free_image_data){    if (free_image_data && image_data) {        free(image_data);        image_data = NULL;    }    if (png_ptr && info_ptr) {        png_destroy_read_struct (&png_ptr, &info_ptr, NULL);        png_ptr = NULL;        info_ptr = NULL;    }}/* Get the transparent info */static void get_transparent_info (png_structp png_ptr, png_infop info_ptr,                 int bit_depth, int color_type, MYBITMAP* bmp){    png_bytep trans;    int num_trans;    png_color_16p trans_values;    if (png_get_tRNS (png_ptr, info_ptr, &trans, &num_trans, &trans_values)                        && num_trans) {        gal_uint8 r = 0, g = 0, b = 0;        switch (color_type) {            case PNG_COLOR_TYPE_GRAY:                if (bit_depth < 8)                    trans_values->gray = trans_values->gray << (8 - bit_depth);                r = g = b = trans_values->gray;                break;            case PNG_COLOR_TYPE_PALETTE:            {                png_colorp pal;                int num_pal;                if (png_get_PLTE (png_ptr, info_ptr, &pal, &num_pal) && *trans < num_pal) {                    r = pal [*trans].red;                    g = pal [*trans].green;                    b = pal [*trans].blue;                }                break;            }            case PNG_COLOR_TYPE_RGB:                r = trans_values->red >> 8;                g = trans_values->green >> 8;                b = trans_values->blue >> 8;                break;        }        bmp->flags |= MYBMP_TRANSPARENT;        bmp->transparent = MakeRGB (r, g, b);   }}int load_png (MG_RWops* area, MYBITMAP* bmp, RGB* pal){    int rc;    png_structp png_ptr;    png_infop info_ptr;    ulg width;    ulg height;    int bit_depth, intent, color_type, chanels;    double screen_gamma;    if ((rc = readpng_init(&png_ptr, &info_ptr, area, &width, &height, &bit_depth, &color_type)) != 0) {        switch (rc) {        case _PNG_SIG_ERROR:            return ERR_BMP_IMAGE_TYPE;        case _PNG_MEM_ALLOC:            return ERR_BMP_MEM;        default:            return ERR_BMP_LOAD;        }    }    bmp->flags = MYBMP_FLOW_DOWN | MYBMP_TYPE_RGB | MYBMP_RGBSIZE_3;    bmp->depth = 24;    bmp->w = width;    bmp->h = height;    bmp->frames = 1;    /* tell libpng to strip 16 bit/color files down to 8 bits/color */    if (bit_depth == 16)        png_set_strip_16 (png_ptr);    /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single     * byte into separate bytes (useful for paletted and grayscale images).     */    if (bit_depth < 8)        png_set_packing (png_ptr);    /* Expand paletted colors into true RGB triplets */    if (color_type == PNG_COLOR_TYPE_PALETTE)        png_set_palette_to_rgb (png_ptr);    if (color_type == PNG_COLOR_TYPE_GRAY)        png_set_gray_to_rgb (png_ptr);    /* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */    if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)        png_set_gray_1_2_4_to_8 (png_ptr);#ifdef _USE_NEWGAL    if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) {#if 1        get_transparent_info (png_ptr, info_ptr, bit_depth, color_type, bmp);#else        /* Expand paletted or RGB images with transparency to full alpha channels         * so the data will be available as RGBA quartets.         */        png_set_tRNS_to_alpha (png_ptr);        bmp->flags = MYBMP_FLOW_DOWN | MYBMP_TYPE_RGBA | MYBMP_RGBSIZE_4 | MYBMP_ALPHA;        bmp->depth = 32;#endif    }    if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) {        bmp->flags = MYBMP_FLOW_DOWN | MYBMP_TYPE_RGBA | MYBMP_RGBSIZE_4 | MYBMP_ALPHA;        bmp->depth = 32;    }    if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {        png_set_gray_to_rgb (png_ptr);        bmp->flags = MYBMP_FLOW_DOWN | MYBMP_TYPE_RGBA | MYBMP_RGBSIZE_4 | MYBMP_ALPHA;        bmp->depth = 32;    }#else    if (color_type & PNG_COLOR_MASK_ALPHA) {        png_set_strip_alpha(png_ptr);    }    else {        get_transparent_info (png_ptr, info_ptr, bit_depth, color_type, bmp);    }#endif#if 1    screen_gamma = 2.2;  /* A good guess for a PC monitors in a dimly room */#else    screen_gamma = 1.7 or 1.0;  /* A good guess for Mac systems */#endif    /* Tell libpng to handle the gamma conversion */    if (png_get_sRGB (png_ptr, info_ptr, &intent))        png_set_gamma (png_ptr, screen_gamma, 0.45455);    else    {        double image_gamma;        if (png_get_gAMA (png_ptr, info_ptr, &image_gamma))            png_set_gamma (png_ptr, screen_gamma, image_gamma);        else            png_set_gamma( png_ptr, screen_gamma, 0.45455);    }    bmp->bits = (unsigned char*) readpng_get_image (png_ptr,             info_ptr, &chanels, (ulg *)&bmp->pitch);    readpng_cleanup (png_ptr, info_ptr, bmp->bits, FALSE);    if (bmp->bits)        return ERR_BMP_OK;    return ERR_BMP_LOAD;}BOOL check_png (MG_RWops* fp){    char sig [9];    MGUI_RWread (fp, sig, 8, 1);    return png_check_sig (sig, 8);}#endif /* _PNG_FILE_SUPPORT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线一二三四区| 欧美在线小视频| 国产欧美一区二区在线| 国产一区在线观看麻豆| 国产丝袜欧美中文另类| 9久草视频在线视频精品| 亚洲精品免费在线播放| 色哟哟国产精品| 日韩精品每日更新| 日韩精品专区在线| 国产成人免费9x9x人网站视频| 久久久综合精品| 白白色 亚洲乱淫| 亚洲一区二区三区四区五区黄 | 日韩精品一区二| 国产精品911| 亚洲欧美另类久久久精品2019| 在线观看欧美日本| 麻豆一区二区99久久久久| 国产亚洲污的网站| 欧洲一区二区三区在线| 久久99国产精品成人| 亚洲欧洲日韩av| 在线播放亚洲一区| 成人av影视在线观看| 婷婷国产在线综合| 久久婷婷国产综合国色天香| 色综合久久久久网| 久久超级碰视频| 中文字幕一区视频| 日韩三级在线观看| 99re热视频这里只精品| 久草精品在线观看| 亚洲自拍偷拍图区| 欧美激情中文字幕一区二区| 欧美日韩情趣电影| 国产精品白丝jk白祙喷水网站| 亚洲一二三专区| 欧美精彩视频一区二区三区| 欧美群妇大交群的观看方式| www.日韩av| 久久99国内精品| 一区二区三区毛片| 国产欧美精品国产国产专区| 5858s免费视频成人| 色哟哟在线观看一区二区三区| 国产一区二区三区久久久| 婷婷成人综合网| 亚洲人123区| 亚洲国产精品国自产拍av| 日韩一区二区影院| 欧美性色黄大片| 99久久婷婷国产综合精品电影| 国产乱码精品一区二区三区av | 91亚洲精华国产精华精华液| 久久精品久久精品| 亚洲成人一区二区| 亚洲黄色尤物视频| 亚洲免费色视频| 久久久精品黄色| 欧美精品一区二| 日韩一区二区三区视频| 欧美日韩激情在线| 日本高清免费不卡视频| av影院午夜一区| 成人av在线播放网站| 粉嫩av亚洲一区二区图片| 久久精品国产精品亚洲红杏| 日韩福利视频导航| 日日夜夜精品视频免费| 亚洲国产日韩a在线播放| 伊人夜夜躁av伊人久久| 亚洲色图欧美偷拍| 亚洲人123区| 一区二区免费在线播放| 一区二区三区在线视频免费观看| 亚洲乱码日产精品bd| 综合激情网...| 亚洲精品福利视频网站| 一区二区成人在线视频| 一区二区三区四区在线免费观看| 亚洲精品成人精品456| 日韩毛片精品高清免费| 亚洲欧美激情插| 亚洲v日本v欧美v久久精品| 午夜精品在线看| 麻豆成人久久精品二区三区小说| 老司机精品视频在线| 韩国精品久久久| 国产麻豆视频一区| www.99精品| 欧美综合亚洲图片综合区| 欧美日韩国产电影| 日韩精品一区二区在线观看| 久久久精品tv| 亚洲男人的天堂一区二区| 亚洲午夜影视影院在线观看| 三级成人在线视频| 国产在线看一区| 99久久久精品| 91精品综合久久久久久| 久久婷婷综合激情| 亚洲欧美一区二区三区极速播放| 亚洲18女电影在线观看| 久久99久久99| 色婷婷久久99综合精品jk白丝| 91.xcao| 久久一区二区三区四区| 中文字幕日韩一区| 日韩精品亚洲专区| 高清av一区二区| 欧美日韩一区二区在线观看| 久久夜色精品国产欧美乱极品| 亚洲三级在线观看| 老司机免费视频一区二区| gogogo免费视频观看亚洲一| 欧美军同video69gay| 欧美激情一区二区三区四区| 亚洲线精品一区二区三区| 国产伦精品一区二区三区视频青涩| 91玉足脚交白嫩脚丫在线播放| 制服丝袜av成人在线看| 国产精品久久久久久久午夜片| 亚洲福利一区二区三区| 成人午夜激情在线| 51午夜精品国产| 最新热久久免费视频| 久久精品国产第一区二区三区| 在线精品观看国产| 日本一区二区综合亚洲| 肉肉av福利一精品导航| av亚洲精华国产精华精华| 欧美精品日日鲁夜夜添| 中文字幕一区二区视频| 久久精品噜噜噜成人88aⅴ| 欧美视频一区在线| 亚洲欧洲精品一区二区三区| 狠狠色2019综合网| 在线播放国产精品二区一二区四区| 国产精品伦一区| 国产精品一区二区果冻传媒| 91精品国产综合久久久久| 亚洲女性喷水在线观看一区| 丁香五精品蜜臀久久久久99网站| 日韩欧美成人午夜| 天天综合天天综合色| 色综合天天综合在线视频| 国产丝袜美腿一区二区三区| 九九视频精品免费| 欧美一卡二卡三卡| 亚洲成人一二三| 欧美亚洲国产bt| 亚洲青青青在线视频| 成人18精品视频| 国产精品第一页第二页第三页| 国产一区二区精品久久| 精品免费99久久| 日韩av一级片| 日韩一区二区免费在线电影| 视频一区二区三区入口| 欧美男男青年gay1069videost| 亚洲精品免费电影| 色八戒一区二区三区| 亚洲免费观看高清| 色婷婷综合久久久中文一区二区| 中文字幕日韩精品一区 | 久久精品国产77777蜜臀| 91精品国产高清一区二区三区| 五月天国产精品| 欧美精品在线观看播放| 日本在线播放一区二区三区| 日韩一区二区三区四区五区六区| 日本欧美久久久久免费播放网| 欧美一区二区在线视频| 日韩国产在线一| 日韩三级在线观看| 激情五月激情综合网| 久久婷婷综合激情| 成a人片国产精品| 亚洲免费视频中文字幕| 欧美日韩免费电影| 日本中文字幕一区二区有限公司| 91麻豆精品国产91久久久更新时间| 蜜桃视频一区二区三区| 久久久午夜精品理论片中文字幕| 国产精品亚洲一区二区三区在线| 国产精品免费久久久久| 色综合久久综合中文综合网| 亚洲国产欧美在线| 精品少妇一区二区三区| 国产成人一区在线| 亚洲免费伊人电影| 91精品国产麻豆国产自产在线 | 亚洲国产精品黑人久久久 | 欧美日韩国产一级二级| 九色综合国产一区二区三区| 国产精品女主播在线观看| 在线观看91精品国产入口| 老司机免费视频一区二区三区| 欧美国产精品久久|