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

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

?? rpng2-win.c

?? Borland C++BuilderT 6 Developer s Guide
?? C
?? 第 1 頁 / 共 3 頁
字號:
            even_odd_vert = (row / bgscale) & 1;

            r1 = r1_min + (r1_diff * yidx) / yidx_max;
            g1 = g1_min + (g1_diff * yidx) / yidx_max;
            b1 = b1_min + (b1_diff * yidx) / yidx_max;
            r1_inv = r1_min + (r1_diff * (yidx_max-yidx)) / yidx_max;
            g1_inv = g1_min + (g1_diff * (yidx_max-yidx)) / yidx_max;
            b1_inv = b1_min + (b1_diff * (yidx_max-yidx)) / yidx_max;

            r2 = r2_min + (r2_diff * yidx) / yidx_max;
            g2 = g2_min + (g2_diff * yidx) / yidx_max;
            b2 = b2_min + (b2_diff * yidx) / yidx_max;
            r2_inv = r2_min + (r2_diff * (yidx_max-yidx)) / yidx_max;
            g2_inv = g2_min + (g2_diff * (yidx_max-yidx)) / yidx_max;
            b2_inv = b2_min + (b2_diff * (yidx_max-yidx)) / yidx_max;

            dest = bg_data + row*bg_rowbytes;
            for (i = 0;  i < rpng2_info.width;  ++i) {
                even_odd_horiz = (i / bgscale) & 1;
                even_odd = even_odd_vert ^ even_odd_horiz;
                invert_column =
                  (even_odd_horiz && (bg[pat].type & 0x10));
                if (even_odd == 0) {         /* gradient #1 */
                    if (invert_column) {
                        *dest++ = r1_inv;
                        *dest++ = g1_inv;
                        *dest++ = b1_inv;
                    } else {
                        *dest++ = r1;
                        *dest++ = g1;
                        *dest++ = b1;
                    }
                } else {                     /* gradient #2 */
                    if ((invert_column && invert_gradient2) ||
                        (!invert_column && !invert_gradient2))
                    {
                        *dest++ = r2;        /* not inverted or */
                        *dest++ = g2;        /*  doubly inverted */
                        *dest++ = b2;
                    } else {
                        *dest++ = r2_inv;
                        *dest++ = g2_inv;    /* singly inverted */
                        *dest++ = b2_inv;
                    }
                }
            }
        }

/*---------------------------------------------------------------------------
    Soft gradient-diamonds with scale = bgscale.  Code contributed by Adam
    M. Costello.
  ---------------------------------------------------------------------------*/

    } else if ((bg[pat].type & 0x07) == 1) {

        hmax = (bgscale-1)/2;   /* half the max weight of a color */
        max = 2*hmax;           /* the max weight of a color */

        r1 = rgb[bg[pat].rgb1_max].r;
        g1 = rgb[bg[pat].rgb1_max].g;
        b1 = rgb[bg[pat].rgb1_max].b;
        r2 = rgb[bg[pat].rgb2_max].r;
        g2 = rgb[bg[pat].rgb2_max].g;
        b2 = rgb[bg[pat].rgb2_max].b;

        for (row = 0;  row < rpng2_info.height;  ++row) {
            yidx = row % bgscale;
            if (yidx > hmax)
                yidx = bgscale-1 - yidx;
            dest = bg_data + row*bg_rowbytes;
            for (i = 0;  i < rpng2_info.width;  ++i) {
                xidx = i % bgscale;
                if (xidx > hmax)
                    xidx = bgscale-1 - xidx;
                k = xidx + yidx;
                *dest++ = (k*r1 + (max-k)*r2) / max;
                *dest++ = (k*g1 + (max-k)*g2) / max;
                *dest++ = (k*b1 + (max-k)*b2) / max;
            }
        }

/*---------------------------------------------------------------------------
    Radial "starburst" with azimuthal sinusoids; [eventually number of sinu-
    soids will equal bgscale?].  This one is slow but very cool.  Code con-
    tributed by Pieter S. van der Meulen (originally in Smalltalk).
  ---------------------------------------------------------------------------*/

    } else if ((bg[pat].type & 0x07) == 2) {
        uch ch;
        int ii, x, y, hw, hh, grayspot;
        double freq, rotate, saturate, gray, intensity;
        double angle=0.0, aoffset=0.0, maxDist, dist;
        double red=0.0, green=0.0, blue=0.0, hue, s, v, f, p, q, t;

        fprintf(stderr, "%s:  computing radial background...",
          PROGNAME);
        fflush(stderr);

        hh = rpng2_info.height / 2;
        hw = rpng2_info.width / 2;

        /* variables for radial waves:
         *   aoffset:  number of degrees to rotate hue [CURRENTLY NOT USED]
         *   freq:  number of color beams originating from the center
         *   grayspot:  size of the graying center area (anti-alias)
         *   rotate:  rotation of the beams as a function of radius
         *   saturate:  saturation of beams' shape azimuthally
         */
        angle = CLIP(angle, 0.0, 360.0);
        grayspot = CLIP(bg[pat].bg_gray, 1, (hh + hw));
        freq = MAX((double)bg[pat].bg_freq, 0.0);
        saturate = (double)bg[pat].bg_bsat * 0.1;
        rotate = (double)bg[pat].bg_brot * 0.1;
        gray = 0.0;
        intensity = 0.0;
        maxDist = (double)((hw*hw) + (hh*hh));

        for (row = 0;  row < rpng2_info.height;  ++row) {
            y = row - hh;
            dest = bg_data + row*bg_rowbytes;
            for (i = 0;  i < rpng2_info.width;  ++i) {
                x = i - hw;
                angle = (x == 0)? PI_2 : atan((double)y / (double)x);
                gray = (double)MAX(ABS(y), ABS(x)) / grayspot;
                gray = MIN(1.0, gray);
                dist = (double)((x*x) + (y*y)) / maxDist;
                intensity = cos((angle+(rotate*dist*PI)) * freq) *
                  gray * saturate;
                intensity = (MAX(MIN(intensity,1.0),-1.0) + 1.0) * 0.5;
                hue = (angle + PI) * INV_PI_360 + aoffset;
                s = gray * ((double)(ABS(x)+ABS(y)) / (double)(hw + hh));
                s = MIN(MAX(s,0.0), 1.0);
                v = MIN(MAX(intensity,0.0), 1.0);

                if (s == 0.0) {
                    ch = (uch)(v * 255.0);
                    *dest++ = ch;
                    *dest++ = ch;
                    *dest++ = ch;
                } else {
                    if ((hue < 0.0) || (hue >= 360.0))
                        hue -= (((int)(hue / 360.0)) * 360.0);
                    hue /= 60.0;
                    ii = (int)hue;
                    f = hue - (double)ii;
                    p = (1.0 - s) * v;
                    q = (1.0 - (s * f)) * v;
                    t = (1.0 - (s * (1.0 - f))) * v;
                    if      (ii == 0) { red = v; green = t; blue = p; }
                    else if (ii == 1) { red = q; green = v; blue = p; }
                    else if (ii == 2) { red = p; green = v; blue = t; }
                    else if (ii == 3) { red = p; green = q; blue = v; }
                    else if (ii == 4) { red = t; green = p; blue = v; }
                    else if (ii == 5) { red = v; green = p; blue = q; }
                    *dest++ = (uch)(red * 255.0);
                    *dest++ = (uch)(green * 255.0);
                    *dest++ = (uch)(blue * 255.0);
                }
            }
        }
        fprintf(stderr, "done.\n");
        fflush(stderr);
    }

/*---------------------------------------------------------------------------
    Blast background image to display buffer before beginning PNG decode;
    calling function will handle invalidation and UpdateWindow() call.
  ---------------------------------------------------------------------------*/

    for (row = 0;  row < rpng2_info.height;  ++row) {
        src = bg_data + row*bg_rowbytes;
        dest = wimage_data + row*wimage_rowbytes;
        for (i = rpng2_info.width;  i > 0;  --i) {
            r1 = *src++;
            g1 = *src++;
            b1 = *src++;
            *dest++ = b1;
            *dest++ = g1;   /* note reverse order */
            *dest++ = r1;
        }
    }

    return 0;

} /* end function rpng2_win_load_bg_image() */





static void rpng2_win_display_row(ulg row)
{
    uch bg_red   = rpng2_info.bg_red;
    uch bg_green = rpng2_info.bg_green;
    uch bg_blue  = rpng2_info.bg_blue;
    uch *src, *src2=NULL, *dest;
    uch r, g, b, a;
    ulg i;
    static int rows=0;
    static ulg firstrow;

/*---------------------------------------------------------------------------
    rows and firstrow simply track how many rows (and which ones) have not
    yet been displayed; alternatively, we could call InvalidateRect() for
    every row and not bother with the records-keeping.
  ---------------------------------------------------------------------------*/

    Trace((stderr, "beginning rpng2_win_display_row()\n"))

    if (rows == 0)
        firstrow = row;   /* first row not yet displayed */

    ++rows;   /* count of rows received but not yet displayed */

/*---------------------------------------------------------------------------
    Aside from the use of the rpng2_info struct and the lack of an outer
    loop (over rows), this routine is identical to rpng_win_display_image()
    in the non-progressive version of the program.
  ---------------------------------------------------------------------------*/

    src = rpng2_info.image_data + row*rpng2_info.rowbytes;
    if (bg_image)
        src2 = bg_data + row*bg_rowbytes;
    dest = wimage_data + row*wimage_rowbytes;

    if (rpng2_info.channels == 3) {
        for (i = rpng2_info.width;  i > 0;  --i) {
            r = *src++;
            g = *src++;
            b = *src++;
            *dest++ = b;
            *dest++ = g;   /* note reverse order */
            *dest++ = r;
        }
    } else /* if (rpng2_info.channels == 4) */ {
        for (i = rpng2_info.width;  i > 0;  --i) {
            r = *src++;
            g = *src++;
            b = *src++;
            a = *src++;
            if (bg_image) {
                bg_red   = *src2++;
                bg_green = *src2++;
                bg_blue  = *src2++;
            }
            if (a == 255) {
                *dest++ = b;
                *dest++ = g;
                *dest++ = r;
            } else if (a == 0) {
                *dest++ = bg_blue;
                *dest++ = bg_green;
                *dest++ = bg_red;
            } else {
                /* this macro (copied from png.h) composites the
                 * foreground and background values and puts the
                 * result into the first argument; there are no
                 * side effects with the first argument */
                alpha_composite(*dest++, b, a, bg_blue);
                alpha_composite(*dest++, g, a, bg_green);
                alpha_composite(*dest++, r, a, bg_red);
            }
        }
    }

/*---------------------------------------------------------------------------
    Display after every 16 rows or when on last row.  (Region may include
    previously displayed lines due to interlacing--i.e., not contiguous.)
  ---------------------------------------------------------------------------*/

    if ((rows & 0xf) == 0 || row == rpng2_info.height-1) {
        RECT rect;

        rect.left = 0L;
        rect.top = (LONG)firstrow;
        rect.right = (LONG)rpng2_info.width;       /* possibly off by one? */
        rect.bottom = (LONG)row + 1L;              /* possibly off by one? */
        InvalidateRect(global_hwnd, &rect, FALSE);
        UpdateWindow(global_hwnd);                 /* similar to XFlush() */
        rows = 0;
    }

} /* end function rpng2_win_display_row() */





static void rpng2_win_finish_display()
{
    Trace((stderr, "beginning rpng2_win_finish_display()\n"))

    /* last row has already been displayed by rpng2_win_display_row(), so
     * we have nothing to do here except set a flag and let the user know
     * that the image is done */

    rpng2_info.done = TRUE;
    printf(
      "Done.  Press Q, Esc or mouse button 1 (within image window) to quit.\n");
    fflush(stdout);
}





static void rpng2_win_cleanup()
{
    if (bg_image && bg_data) {
        free(bg_data);
        bg_data = NULL;
    }

    if (rpng2_info.image_data) {
        free(rpng2_info.image_data);
        rpng2_info.image_data = NULL;
    }

    if (rpng2_info.row_pointers) {
        free(rpng2_info.row_pointers);
        rpng2_info.row_pointers = NULL;
    }

    if (dib) {
        free(dib);
        dib = NULL;
    }
}





LRESULT CALLBACK rpng2_win_wndproc(HWND hwnd, UINT iMsg, WPARAM wP, LPARAM lP)
{
    HDC         hdc;
    PAINTSTRUCT ps;
    int rc;

    switch (iMsg) {
        case WM_CREATE:
            /* one-time processing here, if any */
            return 0;

        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            rc = StretchDIBits(hdc, 0, 0, rpng2_info.width, rpng2_info.height,
                                    0, 0, rpng2_info.width, rpng2_info.height,
                                    wimage_data, (BITMAPINFO *)bmih,
                                    0, SRCCOPY);
            EndPaint(hwnd, &ps);
            return 0;

        /* wait for the user to tell us when to quit */
        case WM_CHAR:
            switch (wP) {       /* only need one, so ignore repeat count */
                case 'q':
                case 'Q':
                case 0x1B:      /* Esc key */
                    PostQuitMessage(0);
            }
            return 0;

        case WM_LBUTTONDOWN:    /* another way of quitting */
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }

    return DefWindowProc(hwnd, iMsg, wP, lP);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩在线精品一区二区三区激情| 丝袜亚洲另类欧美| 成人动漫一区二区三区| 精品国产乱码久久久久久浪潮| 一区二区三区不卡视频在线观看 | 久久99国产精品尤物| 欧美熟乱第一页| 亚洲成人一区在线| 欧美高清hd18日本| 麻豆国产精品777777在线| 日韩午夜电影在线观看| 九一久久久久久| 久久免费国产精品| 成人午夜激情视频| 亚洲一区在线观看网站| 日韩一区二区三区在线观看| 激情小说欧美图片| 国产欧美一区二区精品秋霞影院| 国产91丝袜在线播放九色| 亚洲激情中文1区| 91精品国产高清一区二区三区| 国产一区欧美二区| 一区二区三区欧美日| 欧美另类变人与禽xxxxx| 国内精品久久久久影院薰衣草| 久久免费精品国产久精品久久久久| www.欧美日韩| 香蕉久久一区二区不卡无毒影院| 久久综合狠狠综合| 欧美性受xxxx黑人xyx| 激情综合亚洲精品| 亚洲免费av网站| 精品久久久久久综合日本欧美| 91啪亚洲精品| 国产又黄又大久久| 偷拍日韩校园综合在线| 中文字幕av一区二区三区| 69精品人人人人| 日本韩国精品一区二区在线观看| 精品无码三级在线观看视频| 亚洲一区二区精品视频| 中文字幕一区二区在线播放| 日韩美女视频在线| 欧美一区二区在线看| 91麻豆福利精品推荐| 国产福利精品导航| 国产精品99久| 久久精品免费观看| 久久亚区不卡日本| 欧美一级午夜免费电影| 欧美在线制服丝袜| av一区二区不卡| 国产精品一二一区| 国产一区二区在线视频| 日韩国产在线一| 亚洲高清不卡在线| 日本一区二区视频在线观看| 精品久久久久久综合日本欧美| 欧美在线不卡一区| 99久久国产综合精品麻豆 | 日韩一区二区三区视频在线| 欧美丝袜丝nylons| 91视频在线观看免费| 91老司机福利 在线| 色中色一区二区| 欧美日韩精品欧美日韩精品| 一本色道久久综合亚洲精品按摩| 国产精品一区在线观看你懂的| 国产美女娇喘av呻吟久久| 国产精品影音先锋| 北岛玲一区二区三区四区| 99热99精品| 色婷婷一区二区| 欧美一区二区网站| 精品国产一区二区三区忘忧草| 欧美精品18+| 精品久久久久久久人人人人传媒| 国产情人综合久久777777| 亚洲欧美一区二区三区孕妇| 亚洲成av人影院| 国产成人在线免费| 成人国产精品免费观看动漫| 成人av网站在线观看免费| 91久久精品网| 制服丝袜亚洲网站| 国产亚洲一二三区| 亚洲精品久久嫩草网站秘色| 亚洲国产成人一区二区三区| 亚洲一区在线观看免费 | 777午夜精品免费视频| 国产亚洲制服色| 亚洲成人动漫在线免费观看| 老司机精品视频一区二区三区| 不卡视频在线观看| 久久人人97超碰com| 婷婷开心激情综合| 岛国av在线一区| 欧美精品一区二区三区高清aⅴ| 亚洲乱码一区二区三区在线观看| 韩国午夜理伦三级不卡影院| 欧美精品123区| 精品欧美黑人一区二区三区| 亚洲一区在线观看视频| 色综合久久九月婷婷色综合| 国产精品少妇自拍| 国产一区二区不卡| 国产日韩欧美亚洲| 国产一区二区三区美女| 日韩欧美二区三区| 天天av天天翘天天综合网色鬼国产| 成人av电影在线网| 中文字幕在线一区二区三区| 久久99精品久久久久婷婷| 日韩欧美久久久| 老司机一区二区| 久久久久久99久久久精品网站| 久久精品国产99久久6| 欧美亚洲综合网| 亚洲一区中文在线| 不卡电影一区二区三区| 亚洲精品一区二区精华| 麻豆国产欧美一区二区三区| 日韩欧美国产精品| 97精品视频在线观看自产线路二| 国产天堂亚洲国产碰碰| 国产精品一区二区三区乱码| 国产亚洲一区二区三区| 一本大道久久a久久精品综合| 一二三四区精品视频| 欧美v日韩v国产v| 不卡一区二区在线| 午夜伦欧美伦电影理论片| 欧美另类变人与禽xxxxx| 国产成人午夜高潮毛片| 亚洲高清中文字幕| 久久久99精品久久| 7777精品伊人久久久大香线蕉| 国产一区二区三区在线看麻豆| 亚洲精品午夜久久久| 久久久国产一区二区三区四区小说 | 欧美一区二区三区爱爱| 狠狠狠色丁香婷婷综合激情 | 在线观看网站黄不卡| 国产成人精品一区二| 麻豆久久一区二区| 亚洲精品国产一区二区精华液| 久久综合色播五月| 欧美日韩午夜在线视频| 99久久婷婷国产| 精品一区二区三区在线播放 | 亚洲资源中文字幕| 自拍偷拍亚洲综合| 最新欧美精品一区二区三区| 欧美色图天堂网| 一本久道中文字幕精品亚洲嫩 | 精品久久国产字幕高潮| 欧美一区二区三区色| 欧美日韩国产精选| 欧美专区在线观看一区| 91久久久免费一区二区| 99精品国产视频| 在线亚洲一区观看| www.久久久久久久久| 99久久精品国产精品久久| 成人h动漫精品一区二| 国产成人综合在线播放| 成人久久18免费网站麻豆| www.激情成人| 欧美影视一区在线| 99riav久久精品riav| 91久久线看在观草草青青| 欧美伦理电影网| 欧美日韩一区二区三区高清| 3atv在线一区二区三区| 久久精品亚洲国产奇米99| 国产精品视频观看| 夜夜揉揉日日人人青青一国产精品| 日日摸夜夜添夜夜添国产精品| 精品在线你懂的| 成熟亚洲日本毛茸茸凸凹| 色综合色综合色综合| 日韩视频在线你懂得| 亚洲国产乱码最新视频| 乱中年女人伦av一区二区| 欧美一区二区三区在线视频 | 国产精品色婷婷久久58| 色婷婷精品大视频在线蜜桃视频 | 成人app软件下载大全免费| 亚洲国产中文字幕在线视频综合| 9191精品国产综合久久久久久| 激情成人综合网| 国产精品美女久久久久高潮| 日韩视频免费观看高清完整版| 91麻豆国产福利在线观看| 久久国产剧场电影| 一区二区三区在线看| 国产亚洲一区二区三区在线观看| 欧美三级视频在线| 91在线免费视频观看| 国产一级精品在线|