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

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

?? rpng2-x.c

?? Borland C++BuilderT 6 Developer s Guide
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*---------------------------------------------------------------------------

   rpng2 - progressive-model PNG display program                  rpng2-x.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 the X Window System (tested by the author under Unix and by Martin
   Zinser under OpenVMS; may work under OS/2 with a little tweaking).

   Thanks to Adam Costello and Pieter S. van der Meulen for the "diamond"
   and "radial waves" patterns, respectively.

   to do:
    - 8-bit support
    - finish resizable checkerboard-gradient (sizes 4-128?)
    - use %.1023s to simplify truncation of title-bar string?

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

   Changelog:
    - 1.01:  initial public release
    - 1.02:  modified to allow abbreviated options; fixed char/uchar mismatch
    - 1.10:  added support for non-default visuals; fixed X pixel-conversion
    - 1.11:  added -usleep option for demos; fixed command-line parsing bug
    - 1.12:  added -pause option for demos and testing

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

      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-x"
#define LONGNAME  "Progressive PNG Viewer for X"
#define VERSION   "1.12 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 <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/keysym.h>   /* defines XK_* macros */

#ifdef VMS
#  include <unistd.h>
#endif

/* 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_x_init(void);
static int  rpng2_x_create_window(void);
static int  rpng2_x_load_bg_image(void);
static void rpng2_x_display_row(ulg row);
static void rpng2_x_finish_display(void);
static void rpng2_x_cleanup(void);
static int  rpng2_x_msb(ulg u32val);


static char titlebar[1024], *window_name = titlebar;
static char *appname = LONGNAME;
static char *icon_name = PROGNAME;
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;

int pause_after_pass = FALSE;
int demo_timing = FALSE;
ulg usleep_duration = 0L;

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);


/* X-specific variables */
static char *displayname;
static XImage *ximage;
static Display *display;
static int depth;
static Visual *visual;
static XVisualInfo *visual_list;
static int RShift, GShift, BShift;
static ulg RMask, GMask, BMask;
static Window window;
static GC gc;
static Colormap colormap;

static int have_nondefault_visual = FALSE;
static int have_colormap = FALSE;
static int have_window = FALSE;




int main(int argc, char **argv)
{
#ifdef sgi
    char tmpline[80];
#endif
    char *p, *bgstr = NULL;
    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 */
    XEvent e;
    KeySym k;


    /* First initialize a few things, just to be sure--memset takes care of
     * default background color (black), booleans (FALSE), pointers (NULL),
     * etc. */

    displayname = (char *)NULL;
    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. */

#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;


    /* Now parse the command line for options and the PNG filename. */

    while (*++argv && !error) {
        if (!strncmp(*argv, "-display", 2)) {
            if (!*++argv)
                ++error;
            else
                displayname = *argv;
        } else 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品2024| 成人激情开心网| 亚洲精品一二三四区| 久久久久久电影| 日韩免费福利电影在线观看| 欧美主播一区二区三区美女| 不卡影院免费观看| 成人性生交大合| 狠狠色丁香久久婷婷综| 日韩黄色一级片| 亚洲国产美女搞黄色| 亚洲自拍偷拍欧美| 亚洲激情校园春色| 亚洲人成网站影音先锋播放| 国产精品国产三级国产a| 亚洲国产精品成人综合| 国产精品免费看片| 国产精品久久久久久妇女6080 | 日韩精品一区二区三区在线播放| 色国产精品一区在线观看| 欧美综合色免费| 7777精品伊人久久久大香线蕉| 91精品国产品国语在线不卡| 欧美大胆一级视频| 国产三级精品三级在线专区| 亚洲欧洲色图综合| 日韩在线播放一区二区| 激情综合色综合久久| 成人综合激情网| 欧美日韩在线三区| 国产婷婷色一区二区三区| 综合欧美一区二区三区| 亚洲国产成人av| 国产一区二区导航在线播放| 91色porny在线视频| 欧美一级高清片| 中文无字幕一区二区三区| 亚洲小说欧美激情另类| 国产真实乱对白精彩久久| 欧美这里有精品| 国产亚洲精品aa午夜观看| 一区二区三区高清| 国产麻豆日韩欧美久久| 精品视频在线免费观看| 国产精品视频yy9299一区| 毛片av一区二区三区| 欧美亚州韩日在线看免费版国语版| 久久综合狠狠综合| 免费不卡在线视频| 91成人在线观看喷潮| 亚洲欧美怡红院| 国产精品夜夜爽| 精品久久久久99| 日本不卡一区二区三区| 在线视频一区二区三| 18涩涩午夜精品.www| av在线这里只有精品| www久久久久| 国模娜娜一区二区三区| 亚洲精品一区二区三区影院| 日韩电影在线一区| 日韩欧美美女一区二区三区| 日韩av一区二区三区四区| 7777精品久久久大香线蕉| 午夜免费久久看| 欧美精品tushy高清| 免费精品视频在线| 久久久久亚洲综合| 国产精品一二三四五| 久久久精品综合| 97久久精品人人澡人人爽| 亚洲色图视频免费播放| 在线免费观看成人短视频| 亚洲最新在线观看| 欧美日韩国产欧美日美国产精品| 亚洲电影一区二区三区| 欧美成人三级在线| 国产麻豆视频一区二区| 亚洲日本护士毛茸茸| 在线观看日韩精品| 久久精品国产亚洲高清剧情介绍 | www国产成人| 色综合久久99| 日韩精品欧美精品| 国产亚洲精品资源在线26u| 一本色道久久综合亚洲91| 日韩1区2区3区| 亚洲欧美在线高清| 欧美丰满嫩嫩电影| 成人免费视频caoporn| 天天综合天天综合色| 国产欧美一区二区精品性色超碰| 91看片淫黄大片一级在线观看| 日韩福利视频网| 一区二区三区四区视频精品免费 | 欧美自拍偷拍一区| 成人三级伦理片| 婷婷国产在线综合| 亚洲欧美日韩系列| 国产亚洲欧洲997久久综合| 欧美精品 日韩| 欧美曰成人黄网| 国产99精品国产| 久久成人18免费观看| 亚洲午夜精品在线| 18欧美亚洲精品| ...xxx性欧美| 亚洲日本欧美天堂| 亚洲男人天堂av| 国产精品久久网站| 日本一区二区高清| 久久久久久麻豆| 欧美韩国日本综合| 国产亲近乱来精品视频| 欧美成人在线直播| 久久夜色精品一区| 精品国产在天天线2019| 日韩精品一区二区在线观看| 精品久久一二三区| 久久久久9999亚洲精品| 国产精品免费网站在线观看| 1区2区3区国产精品| 亚洲卡通动漫在线| 五月激情综合网| 极品少妇xxxx精品少妇偷拍| 国产成人免费在线观看| 成人av在线影院| 91视频国产观看| 欧美精品一二三| 久久影院午夜片一区| 中文字幕av在线一区二区三区| 亚洲婷婷综合色高清在线| 亚洲成人黄色影院| 国产成人无遮挡在线视频| 色拍拍在线精品视频8848| 91精品国产福利| 国产蜜臀97一区二区三区| 一区二区高清免费观看影视大全| 视频一区在线播放| 国产精品中文字幕日韩精品 | 欧美一区二区福利在线| 国产日韩欧美电影| 日日摸夜夜添夜夜添精品视频| 国产成人在线影院| 欧美视频在线一区二区三区 | 亚洲国产aⅴ天堂久久| 国产69精品久久久久毛片| 欧美乱妇一区二区三区不卡视频| 久久免费看少妇高潮| 日一区二区三区| 99视频国产精品| 国产欧美一区二区三区沐欲| 视频一区二区三区在线| 色婷婷综合久久久久中文| 久久精品夜色噜噜亚洲aⅴ| 麻豆极品一区二区三区| 欧洲一区在线电影| 综合亚洲深深色噜噜狠狠网站| 国产麻豆午夜三级精品| 3atv在线一区二区三区| 一区二区三区四区在线免费观看 | 亚洲蜜臀av乱码久久精品蜜桃| 国产精品99久久久| www久久精品| 国产精品白丝jk黑袜喷水| 精品黑人一区二区三区久久 | 美女视频黄免费的久久| 51精品秘密在线观看| 免费人成精品欧美精品| 日韩一卡二卡三卡四卡| 美女诱惑一区二区| 精品乱人伦小说| 韩国成人福利片在线播放| 精品少妇一区二区三区在线视频| 亚洲成av人片| 欧美成人一区二区三区在线观看 | 欧美日韩一区不卡| 日韩电影在线观看网站| 久久综合久久综合久久综合| 国产成人综合在线播放| 亚洲欧美一区二区在线观看| 欧美在线999| 国产露脸91国语对白| 国产免费成人在线视频| 色老汉av一区二区三区| 日韩av网站在线观看| 久久久久久久久久久久久夜| 99久久国产综合色|国产精品| 夜色激情一区二区| 久久中文娱乐网| 色美美综合视频| 精品在线免费观看| 亚洲一级二级三级| 日韩一区二区高清| 在线精品观看国产| 国产美女在线精品| 亚洲大尺度视频在线观看| 国产日韩高清在线| 欧美一区二区成人| 欧美综合色免费|