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

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

?? png.c

?? 這是針對 Linux (i386)平臺的 minigui 3.6.2 開發包(MiniGUI-Processes 運行模式)。
?? C
字號:
/*** $Id: png.c,v 1.14 2004/08/03 11:01:57 panweiguo 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 "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 __mg_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 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);    /* Expand paletted colors into true RGB triplets */    if (color_type == PNG_COLOR_TYPE_PALETTE)        png_set_palette_to_rgb (png_ptr);    else if (color_type == PNG_COLOR_TYPE_GRAY)        png_set_gray_to_rgb (png_ptr);#ifdef _USE_NEWGAL    if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) {        get_transparent_info (png_ptr, info_ptr, bit_depth, color_type, bmp);    }    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 (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) {        get_transparent_info (png_ptr, info_ptr, bit_depth, color_type, bmp);        png_set_strip_alpha (png_ptr);    }    else if (color_type & PNG_COLOR_MASK_ALPHA) {        png_set_strip_alpha (png_ptr);    }#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 __mg_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一区二区三区免费野_久草精品视频
久久亚区不卡日本| 青青草视频一区| 午夜一区二区三区视频| 激情深爱一区二区| 欧美主播一区二区三区美女| 久久亚洲欧美国产精品乐播| 一区二区三区在线视频观看| 国内外精品视频| 欧美精品免费视频| 亚洲嫩草精品久久| 国产suv精品一区二区883| 欧美一级淫片007| 亚洲一区二区三区四区五区黄| 国产精品综合av一区二区国产馆| 制服.丝袜.亚洲.中文.综合| 樱花草国产18久久久久| www.爱久久.com| 国产欧美日韩在线观看| 精品一区二区三区免费| 制服丝袜一区二区三区| 婷婷久久综合九色综合绿巨人 | 国产精品天美传媒| 美女任你摸久久| 日韩一区二区三区在线| 亚洲电影一级黄| 欧美视频第二页| 一区二区三区四区不卡视频| 91理论电影在线观看| 亚洲色图一区二区三区| 99久久er热在这里只有精品66| 国产精品久久久久久福利一牛影视| 国产做a爰片久久毛片| 精品国产1区二区| 国产一区二区三区免费看| 精品成a人在线观看| 精彩视频一区二区三区| 国产无人区一区二区三区| 国产电影一区二区三区| 国产精品丝袜一区| av一二三不卡影片| 亚洲男同性视频| 欧美日韩不卡一区| 久久99国产精品麻豆| 久久久久久电影| 国产sm精品调教视频网站| 亚洲欧洲日本在线| 色综合久久久久久久| 亚洲综合999| 欧美一区二视频| 国产一区二区三区四区五区美女| 国产亚洲精品中文字幕| 91亚洲精品久久久蜜桃| 亚洲成人免费观看| 精品少妇一区二区三区| 成人精品视频一区| 亚洲最色的网站| 日韩手机在线导航| 粉嫩欧美一区二区三区高清影视| 一区二区三区中文字幕| 欧美一区午夜视频在线观看| 国产精品综合二区| 一区二区三区毛片| 欧美va亚洲va在线观看蝴蝶网| 成人午夜av影视| 亚洲国产精品久久一线不卡| 欧美精品一区二区三区蜜桃视频| av激情成人网| 日本午夜一本久久久综合| 中文字幕欧美日本乱码一线二线| 91黄色激情网站| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲丝袜自拍清纯另类| 日韩三级av在线播放| 99久久伊人久久99| 蜜桃视频一区二区三区在线观看| 国产精品伦理在线| 日韩欧美在线不卡| 日本黄色一区二区| 国产精品一区二区在线观看网站| 一区二区高清视频在线观看| 欧美不卡一二三| 欧美在线免费播放| 成人性视频网站| 美女视频第一区二区三区免费观看网站 | 奇米一区二区三区| 国产精品久久久久久久久久久免费看 | 一本一本久久a久久精品综合麻豆| 午夜视频一区二区三区| 中文字幕一区二区三区蜜月| 日韩欧美高清在线| 欧美日韩中文精品| 97久久精品人人澡人人爽| 极品少妇一区二区| 日韩和欧美的一区| 一区二区三区四区国产精品| 日本一区二区综合亚洲| 精品国产成人在线影院| 在线成人av影院| 欧美伊人久久久久久久久影院| 丁香五精品蜜臀久久久久99网站| 九色综合国产一区二区三区| 午夜精品久久久久久不卡8050| 亚洲欧美综合另类在线卡通| 久久久久久久久99精品| 26uuu精品一区二区在线观看| 欧美日韩的一区二区| 欧美丝袜丝nylons| 色播五月激情综合网| 99精品视频一区二区三区| 高清免费成人av| 国产白丝精品91爽爽久久| 国产精品一区二区久激情瑜伽| 免费高清视频精品| 美女视频黄久久| 激情综合色播激情啊| 久久www免费人成看片高清| 青青草91视频| 久久国产精品第一页| 精品一区二区三区香蕉蜜桃| 久久99国产精品免费| 国产一区欧美日韩| 国产馆精品极品| 成人av免费在线| 91丝袜高跟美女视频| 91蝌蚪porny| 欧美午夜精品理论片a级按摩| 日本高清不卡aⅴ免费网站| 日本道免费精品一区二区三区| 91福利精品视频| 在线播放欧美女士性生活| 欧美一卡2卡三卡4卡5免费| 精品黑人一区二区三区久久| 久久久久久综合| 中文字幕在线观看不卡| 亚洲女子a中天字幕| 亚洲一卡二卡三卡四卡五卡| 免费精品视频最新在线| 国产精品综合在线视频| 91视频国产资源| 欧美久久一二区| 久久亚洲免费视频| 中文字幕视频一区二区三区久| 亚洲激情网站免费观看| 免费观看91视频大全| 成人免费视频播放| 欧美日韩久久一区二区| 久久综合一区二区| 亚洲欧美一区二区三区孕妇| 亚洲国产成人av网| 国产麻豆成人精品| 在线中文字幕一区| 成人一区二区三区视频| www.欧美精品一二区| 欧美性三三影院| 精品国产一区二区三区久久影院| 久久久综合网站| 亚洲黄色尤物视频| 麻豆精品一区二区| 99久久精品免费看国产免费软件| 欧美天堂亚洲电影院在线播放| 日韩美女一区二区三区| 一区二区中文视频| 男男视频亚洲欧美| av福利精品导航| 日韩一区二区免费视频| 亚洲欧洲日本在线| 久久99国产精品麻豆| 欧美亚洲图片小说| 日本一区二区三区久久久久久久久不| 综合久久一区二区三区| 久草精品在线观看| 欧美另类变人与禽xxxxx| 中文av一区特黄| 亚洲黄色小视频| 国内精品写真在线观看| 欧美亚洲动漫精品| 亚洲私人黄色宅男| 国产成人午夜电影网| 日韩精品一区二区三区在线播放| 免费一区二区视频| 欧洲av一区二区嗯嗯嗯啊| 国产精品色呦呦| 国产一区二区三区国产| 日韩一区二区电影| 亚洲成人久久影院| 欧美视频一区二区三区在线观看| 国产精品美女久久久久av爽李琼| 国产一区二区剧情av在线| 精品国产乱码久久久久久久| 蜜臀精品一区二区三区在线观看| 欧美午夜一区二区三区 | 成人黄色在线看| 国产日韩欧美不卡在线| 国产精品一区二区三区乱码| 久久影院电视剧免费观看| 久久精品国产99| 久久综合久久综合九色| 国产激情一区二区三区四区| 久久免费午夜影院| 国产盗摄精品一区二区三区在线|