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

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

?? rpng2-win.c

?? Visual C++專業游戲程序設計(附書CD)【原出版社】 Softbank Publishing,Inc. 【作者】 (日)坂本千尋 【譯者】 博碩文化 【叢書名】 游戲編程大師系列 【出版社】
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*---------------------------------------------------------------------------   rpng2 - progressive-model PNG display program                rpng2-win.c   This program decodes and displays PNG files progressively, as if it were   a web browser (though the front end is only set up to read from files).   It supports gamma correction, user-specified background colors, and user-   specified background patterns (for transparent images).  This version is   for 32-bit Windows; it may compile under 16-bit Windows with a little   tweaking (or maybe not).  Thanks to Adam Costello and Pieter S. van der   Meulen for the "diamond" and "radial waves" patterns, respectively.   to do:    - stdout/stderr don't work!  need message window (maybe scrollable?)    - handle quoted command-line args (especially filenames with spaces)    - finish resizable checkerboard-gradient (sizes 4-128?)    - use %.1023s to simplify truncation of title-bar string?    - have minimum window width:  oh well  ---------------------------------------------------------------------------   Changelog:    - 1.01:  initial public release    - 1.02:  fixed cut-and-paste error in usage screen (oops...)    - 1.03:  modified to allow abbreviated options    - 1.04:  removed bogus extra argument from usage fprintf() [Glenn R-P?];              fixed command-line parsing bug  ---------------------------------------------------------------------------      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.  ---------------------------------------------------------------------------*/#define PROGNAME  "rpng2-win"#define LONGNAME  "Progressive PNG Viewer for Windows"#define VERSION   "1.04 of 19 March 2000"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <setjmp.h>    /* for jmpbuf declaration in readpng2.h */#include <time.h>#include <math.h>      /* only for PvdM background code */#include <windows.h>/* all for PvdM background code: */#ifndef PI#  define PI             3.141592653589793238#endif#define PI_2             (PI*0.5)#define INV_PI_360       (360.0 / PI)#define MAX(a,b)         (a>b?a:b)#define MIN(a,b)         (a<b?a:b)#define CLIP(a,min,max)  MAX(min,MIN((a),max))#define ABS(a)           ((a)<0?-(a):(a))#define CLIP8P(c)        MAX(0,(MIN((c),255)))   /* 8-bit pos. integer (uch) */#define ROUNDF(f)        ((int)(f + 0.5))#define rgb1_max   bg_freq#define rgb1_min   bg_gray#define rgb2_max   bg_bsat#define rgb2_min   bg_brot/* #define DEBUG */     /* this enables the Trace() macros */#include "readpng2.h"   /* typedefs, common macros, readpng2 prototypes *//* could just include png.h, but this macro is the only thing we need * (name and typedefs changed to local versions); note that side effects * only happen with alpha (which could easily be avoided with * "ush acopy = (alpha);") */#define alpha_composite(composite, fg, alpha, bg) {               \    ush temp = ((ush)(fg)*(ush)(alpha) +                          \                (ush)(bg)*(ush)(255 - (ush)(alpha)) + (ush)128);  \    (composite) = (uch)((temp + (temp >> 8)) >> 8);               \}#define INBUFSIZE 4096   /* with pseudo-timing on (1 sec delay/block), this                          *  block size corresponds roughly to a download                          *  speed 10% faster than theoretical 33.6K maximum                          *  (assuming 8 data bits, 1 stop bit and no other                          *  overhead) *//* local prototypes */static void       rpng2_win_init(void);static int        rpng2_win_create_window(void);static int        rpng2_win_load_bg_image(void);static void       rpng2_win_display_row(ulg row);static void       rpng2_win_finish_display(void);static void       rpng2_win_cleanup(void);LRESULT CALLBACK  rpng2_win_wndproc(HWND, UINT, WPARAM, LPARAM);static char titlebar[1024], *window_name = titlebar;static char *progname = PROGNAME;static char *appname = LONGNAME;static char *icon_name = PROGNAME;    /* GRR:  not (yet) used */static char *filename;static FILE *infile;static mainprog_info rpng2_info;static uch inbuf[INBUFSIZE];static int incount;static int pat = 6;         /* must be less than num_bgpat */static int bg_image = 0;static int bgscale = 16;static ulg bg_rowbytes;static uch *bg_data;static struct rgb_color {    uch r, g, b;} rgb[] = {    {  0,   0,   0},    /*  0:  black */    {255, 255, 255},    /*  1:  white */    {173, 132,  57},    /*  2:  tan */    { 64, 132,   0},    /*  3:  medium green */    {189, 117,   1},    /*  4:  gold */    {253, 249,   1},    /*  5:  yellow */    {  0,   0, 255},    /*  6:  blue */    {  0,   0, 120},    /*  7:  medium blue */    {255,   0, 255},    /*  8:  magenta */    { 64,   0,  64},    /*  9:  dark magenta */    {255,   0,   0},    /* 10:  red */    { 64,   0,   0},    /* 11:  dark red */    {255, 127,   0},    /* 12:  orange */    {192,  96,   0},    /* 13:  darker orange */    { 24,  60,   0},    /* 14:  dark green-yellow */    { 85, 125, 200}     /* 15:  ice blue */};/* not used for now, but should be for error-checking:static int num_rgb = sizeof(rgb) / sizeof(struct rgb_color); *//*    This whole struct is a fairly cheesy way to keep the number of    command-line options to a minimum.  The radial-waves background    type is a particularly poor fit to the integer elements of the    struct...but a few macros and a little fixed-point math will do    wonders for ya.    type bits:       F E D C B A 9 8 7 6 5 4 3 2 1 0                             | | | | |                             | | +-+-+-- 0 = sharp-edged checkerboard                             | |         1 = soft diamonds                             | |         2 = radial waves                             | |       3-7 = undefined                             | +-- gradient #2 inverted?                             +-- alternating columns inverted? */static struct background_pattern {    ush type;    int rgb1_max, rgb1_min;     /* or bg_freq, bg_gray */    int rgb2_max, rgb2_min;     /* or bg_bsat, bg_brot (both scaled by 10)*/} bg[] = {    {0+8,   2,0,  1,15},        /* checkered:  tan/black vs. white/ice blue */    {0+24,  2,0,  1,0},         /* checkered:  tan/black vs. white/black */    {0+8,   4,5,  0,2},         /* checkered:  gold/yellow vs. black/tan */    {0+8,   4,5,  0,6},         /* checkered:  gold/yellow vs. black/blue */    {0,     7,0,  8,9},         /* checkered:  deep blue/black vs. magenta */    {0+8,  13,0,  5,14},        /* checkered:  orange/black vs. yellow */    {0+8,  12,0, 10,11},        /* checkered:  orange/black vs. red */    {1,     7,0,  8,0},         /* diamonds:  deep blue/black vs. magenta */    {1,    12,0, 11,0},         /* diamonds:  orange vs. dark red */    {1,    10,0,  7,0},         /* diamonds:  red vs. medium blue */    {1,     4,0,  5,0},         /* diamonds:  gold vs. yellow */    {1,     3,0,  0,0},         /* diamonds:  medium green vs. black */    {2,    16, 100,  20,   0},  /* radial:  ~hard radial color-beams */    {2,    18, 100,  10,   2},  /* radial:  soft, curved radial color-beams */    {2,    16, 256, 100, 250},  /* radial:  very tight spiral */    {2, 10000, 256,  11,   0}   /* radial:  dipole-moire' (almost fractal) */};static int num_bgpat = sizeof(bg) / sizeof(struct background_pattern);/* Windows-specific global variables (could go in struct, but messy...) */static ulg wimage_rowbytes;static uch *dib;static uch *wimage_data;static BITMAPINFOHEADER *bmih;static HWND global_hwnd;static HINSTANCE global_hInst;static int global_showmode;int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode){    char *args[1024];                 /* arbitrary limit, but should suffice */    char **argv = args;    char *p, *q, *bgstr = NULL;    int argc = 0;    int rc, alen, flen;    int error = 0;    int timing = FALSE;    int have_bg = FALSE;    double LUT_exponent;              /* just the lookup table */    double CRT_exponent = 2.2;        /* just the monitor */    double default_display_exponent;  /* whole display system */    MSG msg;    /* First initialize a few things, just to be sure--memset takes care of     * default background color (black), booleans (FALSE), pointers (NULL),     * etc. */    global_hInst = hInst;    global_showmode = showmode;    filename = (char *)NULL;    memset(&rpng2_info, 0, sizeof(mainprog_info));    /* Set the default value for our display-system exponent, i.e., the     * product of the CRT exponent and the exponent corresponding to     * the frame-buffer's lookup table (LUT), if any.  This is not an     * exhaustive list of LUT values (e.g., OpenStep has a lot of weird     * ones), but it should cover 99% of the current possibilities.  And     * yes, these ifdefs are completely wasted in a Windows program... */#if defined(NeXT)    /* third-party utilities can modify the default LUT exponent */    LUT_exponent = 1.0 / 2.2;    /*    if (some_next_function_that_returns_gamma(&next_gamma))        LUT_exponent = 1.0 / next_gamma;     */#elif defined(sgi)    LUT_exponent = 1.0 / 1.7;    /* there doesn't seem to be any documented function to     * get the "gamma" value, so we do it the hard way */    infile = fopen("/etc/config/system.glGammaVal", "r");    if (infile) {        double sgi_gamma;        fgets(tmpline, 80, infile);        fclose(infile);        sgi_gamma = atof(tmpline);        if (sgi_gamma > 0.0)            LUT_exponent = 1.0 / sgi_gamma;    }#elif defined(Macintosh)    LUT_exponent = 1.8 / 2.61;    /*    if (some_mac_function_that_returns_gamma(&mac_gamma))        LUT_exponent = mac_gamma / 2.61;     */#else    LUT_exponent = 1.0;   /* assume no LUT:  most PCs */#endif    /* the defaults above give 1.0, 1.3, 1.5 and 2.2, respectively: */    default_display_exponent = LUT_exponent * CRT_exponent;    /* If the user has set the SCREEN_GAMMA environment variable as suggested     * (somewhat imprecisely) in the libpng documentation, use that; otherwise     * use the default value we just calculated.  Either way, the user may     * override this via a command-line option. */    if ((p = getenv("SCREEN_GAMMA")) != NULL)        rpng2_info.display_exponent = atof(p);    else        rpng2_info.display_exponent = default_display_exponent;    /* Windows really hates command lines, so we have to set up our own argv.     * Note that we do NOT bother with quoted arguments here, so don't use     * filenames with spaces in 'em! */    argv[argc++] = PROGNAME;    p = cmd;    for (;;) {        if (*p == ' ')            while (*++p == ' ')                ;        /* now p points at the first non-space after some spaces */        if (*p == '\0')            break;    /* nothing after the spaces:  done */        argv[argc++] = q = p;        while (*q && *q != ' ')            ++q;        /* now q points at a space or the end of the string */        if (*q == '\0')            break;    /* last argv already terminated; quit */        *q = '\0';    /* change space to terminator */        p = q + 1;    }    argv[argc] = NULL;   /* terminate the argv array itself */    /* Now parse the command line for options and the PNG filename. */    while (*++argv && !error) {        if (!strncmp(*argv, "-gamma", 2)) {            if (!*++argv)                ++error;            else {                rpng2_info.display_exponent = atof(*argv);                if (rpng2_info.display_exponent <= 0.0)                    ++error;            }        } else if (!strncmp(*argv, "-bgcolor", 4)) {            if (!*++argv)                ++error;            else {                bgstr = *argv;                if (strlen(bgstr) != 7 || bgstr[0] != '#')                    ++error;                else {                    have_bg = TRUE;                    bg_image = FALSE;                }            }        } else if (!strncmp(*argv, "-bgpat", 4)) {            if (!*++argv)                ++error;            else {                pat = atoi(*argv) - 1;                if (pat < 0 || pat >= num_bgpat)                    ++error;                else {                    bg_image = TRUE;                    have_bg = FALSE;                }            }        } else if (!strncmp(*argv, "-timing", 2)) {            timing = TRUE;        } else {            if (**argv != '-') {                filename = *argv;                if (argv[1])   /* shouldn't be any more args after filename */                    ++error;            } else                ++error;   /* not expecting any other options */        }    }    if (!filename) {        ++error;    } else if (!(infile = fopen(filename, "rb"))) {        fprintf(stderr, PROGNAME ":  can't open PNG file [%s]\n", filename);        ++error;    } else {        incount = fread(inbuf, 1, INBUFSIZE, infile);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区免费观在线| 久久伊人中文字幕| 中文字幕一区二区三区四区 | 亚洲色图一区二区| 美腿丝袜亚洲色图| 欧美一区二区三区在线观看| 亚洲va在线va天堂| 麻豆精品国产传媒mv男同| 蜜桃91丨九色丨蝌蚪91桃色| 欧美乱熟臀69xxxxxx| 亚洲一区在线看| 色综合网色综合| 亚洲欧美经典视频| 色琪琪一区二区三区亚洲区| 17c精品麻豆一区二区免费| 国产精品一区二区在线播放| 久久久久久久久一| 成人免费视频视频| 国产精品日韩成人| 97精品久久久午夜一区二区三区| 国产午夜亚洲精品理论片色戒| 国产尤物一区二区在线| 国产婷婷精品av在线| 国产**成人网毛片九色| 国产欧美精品区一区二区三区| 国产不卡在线视频| 亚洲色图丝袜美腿| 欧美日韩精品一区二区| 免费成人深夜小野草| 日韩久久免费av| 中文字幕精品三区| 亚洲国产精品av| 综合久久给合久久狠狠狠97色| 亚洲国产wwwccc36天堂| 欧美久久久久免费| 精品一区二区三区久久| 久久精品夜夜夜夜久久| 欧美中文字幕亚洲一区二区va在线| 视频一区中文字幕| 国产精品久久久久影院| 欧美亚洲动漫精品| 亚洲精品欧美在线| 国产日韩成人精品| 欧美午夜不卡在线观看免费| 国产美女精品人人做人人爽| 亚洲精品国产一区二区精华液 | 香蕉久久一区二区不卡无毒影院| 日韩一级片在线观看| 在线观看一区日韩| 日韩一区二区在线免费观看| 国产欧美精品一区二区色综合| 国产欧美日韩综合| 激情综合网av| 亚洲免费观看高清完整| 一区二区三区欧美激情| 亚洲摸摸操操av| 最新久久zyz资源站| 精品视频在线免费看| 中文字幕第一区综合| 免费在线观看日韩欧美| 日本韩国一区二区三区视频| 国产精品色婷婷久久58| 日韩在线a电影| 色综合视频在线观看| 欧美国产一区在线| 高清不卡在线观看| 国产三级精品三级在线专区| 国模无码大尺度一区二区三区| 欧美精品一区二区三区蜜桃视频 | 国产福利电影一区二区三区| 日韩视频一区二区| 日韩1区2区日韩1区2区| 色婷婷综合久久久久中文一区二区| 欧美激情一区二区| 色偷偷久久人人79超碰人人澡| 91麻豆精品国产无毒不卡在线观看| 99久久久国产精品| 国产欧美日韩麻豆91| 成人91在线观看| 一本大道久久a久久精品综合| 欧美在线视频日韩| 在线观看欧美黄色| 91精彩视频在线| 99国产精品99久久久久久| 蜜桃av一区二区三区电影| 奇米精品一区二区三区四区| 亚洲综合一区在线| 亚洲成人动漫一区| 亚洲国产一区二区三区青草影视| 久久精品日韩一区二区三区| 日韩欧美国产一区在线观看| 在线一区二区视频| 亚洲一区二区三区免费视频| 久久免费午夜影院| www久久精品| 欧美视频一区二| 成人av在线一区二区| 国产毛片精品国产一区二区三区| 欧美亚洲国产怡红院影院| 久久综合狠狠综合久久综合88 | 日韩一区中文字幕| 久久色在线观看| 欧美少妇一区二区| 色综合一区二区三区| 色综合天天综合色综合av | 91高清视频免费看| 成人在线综合网| 国产精品麻豆一区二区| 一区二区三区色| 五月婷婷综合在线| 久久久精品一品道一区| 国产一区二区剧情av在线| 亚洲国产成人porn| 国产精品的网站| 中文字幕国产精品一区二区| 欧美一卡二卡在线观看| 91精品国产综合久久精品app| 国产日韩欧美高清在线| 欧美亚洲动漫精品| 亚洲少妇最新在线视频| 亚洲视频一区在线| 老司机一区二区| 久久av老司机精品网站导航| 午夜精品久久久久久久蜜桃app| 欧美日韩久久久| 亚洲国产精品一区二区久久恐怖片| 日本一区二区三区四区| 日韩色视频在线观看| 欧美精品在欧美一区二区少妇| 91传媒视频在线播放| 欧美在线观看视频在线| 色综合色综合色综合| 狠狠色丁香婷综合久久| 久久国产剧场电影| 青青草97国产精品免费观看无弹窗版| 亚洲欧美色综合| 亚洲精品一二三区| 亚洲成a人v欧美综合天堂| 一区二区三区日韩精品视频| 午夜a成v人精品| 高清成人免费视频| 欧美欧美欧美欧美| 粉嫩av亚洲一区二区图片| 精品影视av免费| 国产成人精品一区二区三区四区| 免费高清在线一区| 精品无人区卡一卡二卡三乱码免费卡| 美腿丝袜亚洲综合| 成人中文字幕合集| 91美女片黄在线观看| 51精品视频一区二区三区| 日韩一级片在线播放| 欧美视频中文字幕| 久久综合99re88久久爱| 国产欧美一二三区| 婷婷久久综合九色综合绿巨人| 日韩高清不卡一区二区| 国产成人亚洲综合a∨猫咪| 99精品欧美一区二区蜜桃免费| 成人sese在线| 3atv一区二区三区| 中文字幕欧美激情一区| 日韩电影免费一区| 国产成人免费高清| 337p亚洲精品色噜噜噜| 国产精品美女久久久久久| 国内精品伊人久久久久av一坑 | 国产精品丝袜一区| 欧美男生操女生| 欧美精品777| 国产精品家庭影院| 日韩中文欧美在线| 成人a级免费电影| 欧美日韩卡一卡二| 亚洲欧美日韩在线播放| 奇米四色…亚洲| 成人性生交大合| 精品福利在线导航| 亚洲欧美精品午睡沙发| 国产91精品在线观看| 国产肉丝袜一区二区| 五月激情综合色| 成人美女视频在线看| 欧美日韩一区二区欧美激情| 2017欧美狠狠色| 亚洲高清免费在线| 福利电影一区二区| 在线播放91灌醉迷j高跟美女 | 国产美女在线观看一区| 成人av网址在线观看| 成人av网站在线观看| 精品理论电影在线观看 | 国产精品福利影院| 日韩电影在线观看一区| 国产一区二区不卡在线| 欧美精品在线一区二区| 亚洲欧美另类图片小说| 色香蕉成人二区免费| 中文字幕 久热精品 视频在线 | 国产在线不卡一卡二卡三卡四卡|