亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久久另类综合| 成人性生交大片免费看中文| 91免费观看视频| 中文在线一区二区| 丁香婷婷综合五月| 久久久久国产精品人| 国产综合久久久久影院| 日韩欧美你懂的| 久久精品国产秦先生| 欧美久久久久久久久久| 中文字幕久久午夜不卡| a4yy欧美一区二区三区| 国产精品日产欧美久久久久| 日韩成人一级大片| 精品视频1区2区3区| 午夜精品视频一区| 91精品国产免费久久综合| 亚洲va天堂va国产va久| 555夜色666亚洲国产免| 蜜桃在线一区二区三区| 在线播放中文字幕一区| 亚洲欧洲日产国产综合网| 欧美性色综合网| 激情综合网激情| 尤物av一区二区| 精品日韩在线观看| 在线观看欧美日本| 国产在线国偷精品免费看| 亚洲免费大片在线观看| 日韩女优电影在线观看| 99精品视频一区| 日本不卡免费在线视频| 亚洲欧美日韩国产综合| 欧美大片一区二区| 欧美亚洲综合在线| 成人中文字幕合集| 美女mm1313爽爽久久久蜜臀| 中文字幕一区二区视频| 日韩美女天天操| 欧美在线观看18| 成人av免费在线观看| 奇米一区二区三区| 亚洲男人的天堂一区二区 | 国产一区二区三区高清播放| 亚洲欧美激情插 | 日本va欧美va精品| 亚洲精品一二三| 国产精品免费aⅴ片在线观看| 欧美裸体bbwbbwbbw| 99久久伊人精品| 高清不卡在线观看av| 天天影视涩香欲综合网| 亚洲欧美一区二区三区孕妇| 国产拍揄自揄精品视频麻豆| 日韩欧美国产精品| 欧美精品国产精品| 欧美日韩一本到| 色婷婷亚洲精品| 99久久久久久| 成人av午夜影院| 国产69精品久久99不卡| 国产综合色精品一区二区三区| 人人精品人人爱| 日韩av网站在线观看| 五月婷婷欧美视频| 亚洲国产精品嫩草影院| 一区二区三区四区中文字幕| 国产精品视频一区二区三区不卡| 精品少妇一区二区三区视频免付费 | 2021国产精品久久精品| 日韩欧美在线网站| 538prom精品视频线放| 欧美日韩一区二区三区高清| 欧亚一区二区三区| 色婷婷综合久色| 日本高清不卡一区| 欧美曰成人黄网| 欧美丝袜丝交足nylons| 欧美伊人久久大香线蕉综合69| 91久久免费观看| 欧美午夜精品久久久久久超碰| 欧美日韩精品免费观看视频| 欧美日本在线看| 欧美一区二区三区在线看 | 日韩午夜电影在线观看| 精品日韩欧美一区二区| 26uuu精品一区二区| 日韩中文字幕av电影| 亚洲www啪成人一区二区麻豆| 午夜精品久久久久久久蜜桃app| 亚洲图片一区二区| 蜜臀av一区二区三区| 久久99精品久久久久久久久久久久| 久久99精品网久久| 粉嫩高潮美女一区二区三区| 99re这里都是精品| 欧美日韩精品一区二区天天拍小说| 欧美乱妇一区二区三区不卡视频| 日韩一卡二卡三卡四卡| 亚洲成人激情社区| 日本欧美久久久久免费播放网| 精品一区二区在线免费观看| 成人午夜视频网站| 欧美中文字幕一区二区三区| 91精品国产色综合久久不卡蜜臀 | 亚洲色图在线看| 亚洲va欧美va人人爽| 国内精品视频666| 波多野结衣一区二区三区 | 欧美一区午夜精品| 国产日韩亚洲欧美综合| 亚洲激情第一区| 精品在线视频一区| 色哟哟日韩精品| 欧美tk丨vk视频| 一区二区三区高清不卡| 极品少妇xxxx精品少妇偷拍| 91蜜桃免费观看视频| 日韩一区二区三区四区五区六区| 中文字幕一区二区三区在线播放 | 国产成人av一区二区| 色悠久久久久综合欧美99| 欧美r级电影在线观看| 亚洲最新视频在线观看| 国产中文一区二区三区| 欧美亚洲愉拍一区二区| 欧美国产激情二区三区| 蜜桃av噜噜一区二区三区小说| 成人的网站免费观看| 欧美一区二区三区在线看| 亚洲麻豆国产自偷在线| 国产自产2019最新不卡| 欧美精品一二三区| 亚洲女厕所小便bbb| 国产aⅴ综合色| 精品国产sm最大网站免费看| 一区二区三区四区国产精品| 国产福利精品一区| 日韩免费成人网| 天天综合色天天综合色h| av在线不卡电影| 久久品道一品道久久精品| 日日噜噜夜夜狠狠视频欧美人| 91年精品国产| 国产精品情趣视频| 国产激情视频一区二区在线观看| 日韩欧美国产一区二区三区| 天堂精品中文字幕在线| 欧美怡红院视频| 亚洲一区二区偷拍精品| 色综合天天性综合| 国产精品久久久久精k8| 国产福利91精品一区二区三区| 精品国产凹凸成av人网站| 久久国产精品区| 日韩一级黄色片| 久久精品国产在热久久| 在线不卡中文字幕| 天堂一区二区在线| 91精品国产综合久久蜜臀| 亚洲bt欧美bt精品777| 欧美性三三影院| 天天影视涩香欲综合网| 9191国产精品| 免费三级欧美电影| 欧美成人一区二区三区片免费 | 老鸭窝一区二区久久精品| 欧美一区二区视频在线观看2022 | 日韩av一区二区三区| 91精品国产色综合久久不卡电影| 午夜在线成人av| 91.xcao| 伦理电影国产精品| 精品国产91乱码一区二区三区 | 5858s免费视频成人| 免费一级片91| 2023国产精品自拍| 国产成人高清在线| 亚洲美女免费视频| 欧美精品1区2区| 国产美女视频一区| 国产精品美女久久久久高潮| 91日韩在线专区| 午夜影院久久久| 久久精品一二三| 91视频com| 日韩精品欧美精品| 精品日韩欧美在线| 成人h动漫精品一区二| 亚洲一区二区三区在线| 欧美一区二区二区| 大白屁股一区二区视频| 亚洲午夜影视影院在线观看| 日韩欧美中文一区| www.在线欧美| 奇米影视一区二区三区| 国产精品理论在线观看| 欧美色偷偷大香| 国产suv一区二区三区88区| 一区二区三区精品视频|