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

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

?? dib.cpp

?? print for you as example.very nice
?? CPP
字號:
// DIB.CPP handles device independant bitmaps both to the screen and the printer


#include "stdafx.h"
#include "dib.h"


static DWORD          dwOffset;
static RECT           rcClip;
static BOOL    bMemoryDIB    = TRUE; /* Load Entire DIB into memory in CF_DIB format */
static BOOL    bLegitDraw    = FALSE; /* We have a valid bitmap to draw               */
static HANDLE   hdibCurrent   = NULL;         /* Handle to current memory DIB         */
static HANDLE   hbiCurrent    = NULL;         /* Handle to current bitmap info struct */

BOOL WINAPI PrintTheBitMap(PRTTYPE *ps)
{
	BITMAPINFOHEADER bi;
    RECT             Rect;
	if(InitDIB(ps)==FALSE)
		return FALSE;   
    DibInfo(hbiCurrent, &bi);

    if (!IsRectEmpty(&rcClip))
    {
          bi.biWidth  = rcClip.right  - rcClip.left;
          bi.biHeight = rcClip.bottom - rcClip.top;
    }
          /* Fix bounding rectangle for the picture .. */

    Rect.top    = ps->rc.top;
    Rect.left   = ps->rc.left;
    Rect.bottom = ps->rc.bottom-ps->rc.top;
    Rect.right  = ps->rc.right-ps->rc.left;
	ps->rc.right=Rect.right;
	ps->rc.bottom=Rect.bottom;
	/* ... and inform the driver */
    ps->pDC->Escape(SET_BOUNDS, sizeof(RECT), (LPSTR)&Rect, NULL);
    PrintDIB(ps, ps->rc.left, ps->rc.top, ps->rc.right, ps->rc.bottom);
    FreeDib();
 	return TRUE;
}

BOOL WINAPI ScreenPrintTheBitMap(PRTTYPE *ps)
{
	BITMAPINFOHEADER bi;
    RECT             Rect;
    if(hbiCurrent==NULL)
    {
		if(InitDIB(ps)==FALSE)
			return FALSE;   
	}			
    DibInfo(hbiCurrent, &bi);

    if (!IsRectEmpty(&rcClip))
    {
          bi.biWidth  = rcClip.right  - rcClip.left;
          bi.biHeight = rcClip.bottom - rcClip.top;
    }
          /* Fix bounding rectangle for the picture .. */
    Rect.top    = ps->rc.top;
    Rect.left   = ps->rc.left;
    Rect.bottom = ps->rc.bottom-ps->rc.top;
    Rect.right  = ps->rc.right-ps->rc.left;
                /* ... and inform the driver */
    ps->pDC->Escape(SET_BOUNDS, sizeof(RECT), (LPSTR)&Rect, NULL);
//    PrintDIB(ps, ps->rc.left, ps->rc.top, ps->rc.right, ps->rc.bottom);
    PrintDIB(ps, ps->rc.left, ps->rc.top, (int)bi.biWidth, (int)bi.biHeight);    
    //FreeDib();
 	return TRUE;
}

int WINAPI InitDIB(PRTTYPE *ps)
{
    unsigned           fh;
    BITMAPINFOHEADER   bi;
    OFSTRUCT           of;

    FreeDib();

    /* Open the file and get a handle to it's BITMAPINFO */

    fh = OpenFile ((LPCSTR)ps->Text, (LPOFSTRUCT)&of, OF_READ);
    if (fh == -1) {
        return FALSE;
    }
    hbiCurrent = ReadDibBitmapInfo(fh);

    dwOffset = _llseek(fh, 0L, SEEK_CUR);
    _lclose (fh);

    if (hbiCurrent == NULL) {
        return FALSE;
    }
    DibInfo(hbiCurrent,&bi);

    bLegitDraw = TRUE;

    /*  If the input bitmap is not in RGB FORMAT the banding code will
     *  not work!  we need to load the DIB bits into memory.
     *  if memory DIB, load it all NOW!  This will avoid calling the
     *  banding code.
     */
       if (bMemoryDIB || bi.biCompression != BI_RGB)
        hdibCurrent = OpenDIB(ps->Text);

    /*  If the RLE could not be loaded all at once, exit gracefully NOW,
     *  to avoid calling the banding code
     */
    if ((bi.biCompression != BI_RGB) && !hdibCurrent){
        FreeDib();
        return FALSE;
    }

    return TRUE;
}

void WINAPI FreeDib(void)
{
    if (hdibCurrent)
        GlobalFree(hdibCurrent);

    if (hbiCurrent && hbiCurrent != hdibCurrent)
        GlobalFree(hbiCurrent);

    bLegitDraw  = FALSE;
    hdibCurrent = NULL;
    hbiCurrent  = NULL;
    SetRectEmpty (&rcClip);
}

void WINAPI PrintDIB (PRTTYPE *ps, int x, int y, int dx, int dy)
{
    BITMAPINFOHEADER bi;
    int dibX,  dibY;
    int dibDX, dibDY;

    if (!bLegitDraw)
        return;

    DibInfo (hbiCurrent, &bi);

    if (IsRectEmpty (&rcClip)){
        dibX  = 0;
        dibY  = 0;
        dibDX = (int)bi.biWidth;
        dibDY = (int)bi.biHeight;
    }
    else{
        dibX  = rcClip.left;
        dibY  = (int)bi.biHeight - 1 - rcClip.bottom;
        dibDX = rcClip.right  - rcClip.left;
        dibDY = rcClip.bottom - rcClip.top;
    }

    if (hdibCurrent){
        /* Stretch the DIB to printer DC */
        StretchDibBlt ( ps->pDC->GetSafeHdc(),
                        x,
                        y,
                        dx,
                        dy,
                        hdibCurrent,
                        dibX,
                        dibY,
                        dibDX,
                        dibDY,
                        SRCCOPY);
    }
 
}

HANDLE WINAPI OpenDIB (LPCSTR szFile)
{
    unsigned            fh;
    BITMAPINFOHEADER    bi;
    LPBITMAPINFOHEADER  lpbi;
    DWORD               dwLen = 0;
    DWORD               dwBits;
    HANDLE              hdib;
    HANDLE              h;
    OFSTRUCT            of;

    /* Open the file and read the DIB information */
    fh = OpenFile(szFile, &of, OF_READ);
    if (fh == -1)
        return NULL;

    hdib = ReadDibBitmapInfo(fh);
    if (!hdib)
        return NULL;
    DibInfo(hdib,&bi);

    /* Calculate the memory needed to hold the DIB */
    dwBits = bi.biSizeImage;
    dwLen  = bi.biSize + (DWORD)PaletteSize (&bi) + dwBits;

    /* Try to increase the size of the bitmap info. buffer to hold the DIB */
    h = GlobalReAlloc(hdib, dwLen, GHND);
    if (!h){
        GlobalFree(hdib);
        hdib = NULL;
    }
    else
        hdib = h;

    /* Read in the bits */
    if (hdib){

        lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib);
        lread(fh, (LPSTR)lpbi + (WORD)lpbi->biSize + PaletteSize(lpbi), dwBits);
        GlobalUnlock(hdib);
    }
    _lclose(fh);

    return hdib;
}

BOOL WINAPI DibInfo (HANDLE hbi,LPBITMAPINFOHEADER lpbi)
{
    if (hbi){
        *lpbi = *(LPBITMAPINFOHEADER)GlobalLock (hbi);

        /* fill in the default fields */
        if (lpbi->biSize != sizeof (BITMAPCOREHEADER)){
            if (lpbi->biSizeImage == 0L)
                lpbi->biSizeImage =
                    WIDTHBYTES(lpbi->biWidth*lpbi->biBitCount) * lpbi->biHeight;

            if (lpbi->biClrUsed == 0L)
                lpbi->biClrUsed = DibNumColors (lpbi);
        }
        GlobalUnlock (hbi);
        return TRUE;
    }
    return FALSE;
}

HANDLE WINAPI ReadDibBitmapInfo (int fh)
{
    DWORD     off;
    HANDLE    hbi = NULL;
    int       size;
    int       i;
    WORD      nNumColors;

    RGBQUAD FAR       *pRgb;
    BITMAPINFOHEADER   bi;
    BITMAPCOREHEADER   bc;
    LPBITMAPINFOHEADER lpbi;
    BITMAPFILEHEADER   bf;
    DWORD              dwWidth = 0;
    DWORD              dwHeight = 0;
    WORD               wPlanes, wBitCount;

    if (fh == -1)
        return NULL;

    /* Reset file pointer and read file header */
    off = _llseek(fh, 0L, SEEK_CUR);
    if (sizeof (bf) != _lread (fh, (LPSTR)&bf, sizeof (bf)))
        return FALSE;

    /* Do we have a RC HEADER? */
    if (!ISDIB (bf.bfType)) {
        bf.bfOffBits = 0L;
        _llseek (fh, off, SEEK_SET);
    }
    if (sizeof (bi) != _lread (fh, (LPSTR)&bi, sizeof(bi)))
        return FALSE;

    nNumColors = DibNumColors (&bi);

    /* Check the nature (BITMAPINFO or BITMAPCORE) of the info. block
     * and extract the field information accordingly. If a BITMAPCOREHEADER,
     * transfer it's field information to a BITMAPINFOHEADER-style block
     */
    switch (size = (int)bi.biSize){
        case sizeof (BITMAPINFOHEADER):
            break;

        case sizeof (BITMAPCOREHEADER):

            bc = *(BITMAPCOREHEADER*)&bi;

            dwWidth   = (DWORD)bc.bcWidth;
            dwHeight  = (DWORD)bc.bcHeight;
            wPlanes   = bc.bcPlanes;
            wBitCount = bc.bcBitCount;

            bi.biSize               = sizeof(BITMAPINFOHEADER);
            bi.biWidth              = dwWidth;
            bi.biHeight             = dwHeight;
            bi.biPlanes             = wPlanes;
            bi.biBitCount           = wBitCount;

            bi.biCompression        = BI_RGB;
            bi.biSizeImage          = 0;
            bi.biXPelsPerMeter      = 0;
            bi.biYPelsPerMeter      = 0;
            bi.biClrUsed            = nNumColors;
            bi.biClrImportant       = nNumColors;

            _llseek (fh, (LONG)sizeof (BITMAPCOREHEADER) - sizeof (BITMAPINFOHEADER), SEEK_CUR);
            break;

        default:
            /* Not a DIB! */
            return NULL;
    }

    /*  Fill in some default values if they are zero */
    if (bi.biSizeImage == 0){
        bi.biSizeImage = WIDTHBYTES ((DWORD)bi.biWidth * bi.biBitCount)
                         * bi.biHeight;
    }
    if (bi.biClrUsed == 0)
        bi.biClrUsed = DibNumColors(&bi);

    /* Allocate for the BITMAPINFO structure and the color table. */
    hbi = GlobalAlloc (GHND, (LONG)bi.biSize + nNumColors * sizeof(RGBQUAD));
    if (!hbi)
        return NULL;
    lpbi = (LPBITMAPINFOHEADER)GlobalLock (hbi);
    *lpbi = bi;

    /* Get a pointer to the color table */
    pRgb = (RGBQUAD FAR *)((LPSTR)lpbi + bi.biSize);
    if (nNumColors){
        if (size == sizeof(BITMAPCOREHEADER)){
            /* Convert a old color table (3 byte RGBTRIPLEs) to a new
             * color table (4 byte RGBQUADs)
             */
            _lread (fh, (LPSTR)pRgb, nNumColors * sizeof(RGBTRIPLE));

            for (i = nNumColors - 1; i >= 0; i--){
                RGBQUAD rgb;

                rgb.rgbRed      = ((RGBTRIPLE FAR *)pRgb)[i].rgbtRed;
                rgb.rgbBlue     = ((RGBTRIPLE FAR *)pRgb)[i].rgbtBlue;
                rgb.rgbGreen    = ((RGBTRIPLE FAR *)pRgb)[i].rgbtGreen;
                rgb.rgbReserved = (BYTE)0;

                pRgb[i] = rgb;
            }
        }
        else
            _lread(fh,(LPSTR)pRgb,nNumColors * sizeof(RGBQUAD));
    }

    if (bf.bfOffBits != 0L)
        _llseek(fh,off + bf.bfOffBits,SEEK_SET);

    GlobalUnlock(hbi);
    return hbi;
}

WORD WINAPI PaletteSize (VOID FAR *pv)
{
    LPBITMAPINFOHEADER lpbi;
    WORD               NumColors;

    lpbi      = (LPBITMAPINFOHEADER)pv;
    NumColors = DibNumColors(lpbi);

    if (lpbi->biSize == sizeof(BITMAPCOREHEADER))
        return NumColors * sizeof(RGBTRIPLE);
    else
        return NumColors * sizeof(RGBQUAD);
}

WORD WINAPI DibNumColors (VOID FAR *pv)
{
    int                 bits;
    LPBITMAPINFOHEADER  lpbi;
    LPBITMAPCOREHEADER  lpbc;

    lpbi = ((LPBITMAPINFOHEADER)pv);
    lpbc = ((LPBITMAPCOREHEADER)pv);

    /*  With the BITMAPINFO format headers, the size of the palette
     *  is in biClrUsed, whereas in the BITMAPCORE - style headers, it
     *  is dependent on the bits per pixel ( = 2 raised to the power of
     *  bits/pixel).
     */
    if (lpbi->biSize != sizeof(BITMAPCOREHEADER)){
        if (lpbi->biClrUsed != 0)
            return (WORD)lpbi->biClrUsed;
        bits = lpbi->biBitCount;
    }
    else
        bits = lpbc->bcBitCount;

    switch (bits){
        case 1:
                return 2;
        case 4:
                return 16;
        case 8:
                return 256;
        default:
                /* A 24 bitcount DIB has no color table */
                return 0;
    }
}

BOOL WINAPI StretchDibBlt (HDC hdc, int x, int y, int dx, int dy,HANDLE  hdib,int x0, int y0,int dx0, int dy0, LONG rop)

{
    LPBITMAPINFOHEADER lpbi;
    LPSTR        pBuf;
    BOOL         f;

    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib);

    if (!lpbi)
        return FALSE;

    pBuf = (LPSTR)lpbi + (WORD)lpbi->biSize + PaletteSize(lpbi);

    f = StretchDIBits ( hdc,
                        x, y,
                        dx, dy,
                        x0, y0,
                        dx0, dy0,
                        pBuf, (LPBITMAPINFO)lpbi,
                        DIB_RGB_COLORS,
                        rop);

    GlobalUnlock(hdib);
    return f;
}

DWORD PASCAL lread (int fh,VOID far * pv,DWORD  ul)
{
    DWORD     ulT = ul;
    BYTE  *hp = (unsigned char  *)pv;

    while (ul > (DWORD)MAXREAD) {
        if (_lread(fh, (LPSTR)hp, (WORD)MAXREAD) != MAXREAD)
                return 0;
        ul -= MAXREAD;
        hp += MAXREAD;
    }
    if (_lread(fh, (LPSTR)hp, (WORD)ul) != (WORD)ul)
        return 0;
    return ulT;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线观看| 欧美顶级少妇做爰| 欧美片在线播放| 精品国产百合女同互慰| 一区二区三区日韩精品视频| 黄一区二区三区| 色久综合一二码| 国产午夜精品一区二区| 日韩精品视频网| 色噜噜夜夜夜综合网| 国产清纯白嫩初高生在线观看91| 亚洲一区二区三区影院| av激情综合网| 久久午夜色播影院免费高清| 日韩黄色小视频| 欧美日韩视频在线第一区| 国产精品国产馆在线真实露脸 | 亚洲国产三级在线| 成人免费毛片a| 国产日韩欧美不卡在线| 青草国产精品久久久久久| 欧美午夜免费电影| 亚洲黄色小说网站| 91美女片黄在线观看91美女| 国产亚洲欧美日韩日本| 久久69国产一区二区蜜臀| 欧美高清性hdvideosex| 午夜影院久久久| 欧洲精品在线观看| 亚洲精品午夜久久久| 99综合电影在线视频| 国产精品免费久久| 成人深夜在线观看| 国产精品久线观看视频| 成人久久久精品乱码一区二区三区| 精品欧美一区二区久久| 麻豆精品国产传媒mv男同| 欧美一区二区三区小说| 美国毛片一区二区三区| 日韩欧美一区二区久久婷婷| 美女免费视频一区| 国产日韩综合av| 99视频一区二区三区| 亚洲一区影音先锋| 欧美日本国产一区| 卡一卡二国产精品| 国产欧美在线观看一区| 成人app下载| 亚洲国产精品久久久久秋霞影院| 欧美色区777第一页| 免费日韩伦理电影| 日本一二三四高清不卡| 91亚洲精品久久久蜜桃网站| 亚洲精品视频在线看| 欧美精品久久久久久久多人混战| 麻豆视频观看网址久久| 国产视频一区二区在线观看| 91在线免费播放| 天天做天天摸天天爽国产一区| 91精品国产日韩91久久久久久| 国产在线国偷精品产拍免费yy| 国产精品女人毛片| 欧美三级在线看| 国产乱码精品一区二区三区av| 国产精品久久久久国产精品日日| 91成人网在线| 国内精品免费在线观看| 亚洲嫩草精品久久| 精品女同一区二区| 色成人在线视频| 狂野欧美性猛交blacked| 中文字幕一区在线观看视频| 这里是久久伊人| 91影院在线免费观看| 免费观看在线综合| 亚洲黄色免费电影| 国产欧美一区二区精品仙草咪| 91官网在线免费观看| 国产在线播放一区三区四| 亚洲精品高清视频在线观看| 精品欧美一区二区在线观看| 在线视频国内一区二区| 国产一区二区三区在线观看精品| 一区二区免费看| 中文字幕高清不卡| 欧美r级在线观看| 欧美性猛片xxxx免费看久爱 | 亚洲国产精品影院| 久久久99久久| 欧美岛国在线观看| 欧美日韩国产高清一区二区三区| 成人一区二区三区视频在线观看| 日韩av高清在线观看| 一区二区三区四区在线播放| 精品国产亚洲在线| 91麻豆精品国产自产在线| 成人av在线资源网| 国产激情一区二区三区四区| 久久国产免费看| 日韩黄色免费网站| 亚洲网友自拍偷拍| 亚洲精品高清视频在线观看| 国产精品久久久久影视| 国产偷国产偷精品高清尤物| 欧美一级xxx| 欧美一区二区视频在线观看2020| 色88888久久久久久影院按摩| 成人黄色a**站在线观看| 国产大陆亚洲精品国产| 国产一区二区精品久久91| 久久国产生活片100| 日韩精品一卡二卡三卡四卡无卡| 天天综合日日夜夜精品| 亚洲18色成人| 三级一区在线视频先锋| 亚洲va天堂va国产va久| 亚洲成人tv网| 男男视频亚洲欧美| 美女网站一区二区| 国产精品系列在线观看| 国产成人在线看| 99久久99久久精品免费观看 | 国产呦萝稀缺另类资源| 久久99国内精品| 国产乱人伦精品一区二区在线观看| 激情文学综合网| 国产精品一级黄| 成人avav在线| 欧美日韩一区国产| 日韩午夜激情av| 精品久久免费看| 国产精品嫩草99a| 亚洲黄色尤物视频| 视频在线在亚洲| 国产一区二区三区国产| 成人av在线影院| 欧美日韩精品一区二区三区| 欧美一级欧美一级在线播放| 精品少妇一区二区三区在线播放| 久久九九影视网| 亚洲卡通欧美制服中文| 日韩av不卡在线观看| 国产精品1024| 在线观看免费亚洲| 日韩欧美一区二区免费| 国产精品无遮挡| 天天射综合影视| 国产成人精品三级| 欧美天堂亚洲电影院在线播放| 日韩欧美中文字幕一区| 欧美激情一区二区三区蜜桃视频| 亚洲人成影院在线观看| 日韩成人精品视频| 成人精品国产一区二区4080| 欧美亚洲综合网| 国产午夜精品一区二区三区嫩草 | 麻豆视频观看网址久久| 97精品国产露脸对白| 91精品福利在线一区二区三区| 国产欧美日韩在线观看| 亚洲电影在线免费观看| 丁香天五香天堂综合| 欧美三区在线观看| 国产欧美日韩视频一区二区| 亚洲va欧美va人人爽| av在线一区二区三区| 欧美成人福利视频| 亚洲成人综合视频| 99re在线视频这里只有精品| 精品国产一区二区亚洲人成毛片| 亚洲制服丝袜一区| 99久久综合精品| 久久久九九九九| 美日韩黄色大片| 欧美日韩日日夜夜| 最新热久久免费视频| 精品一区二区免费视频| 欧美日韩国产123区| 亚洲免费资源在线播放| 高清av一区二区| 精品国产人成亚洲区| 石原莉奈一区二区三区在线观看| 色综合婷婷久久| 国产精品欧美一区喷水| 国产乱子伦视频一区二区三区| 日韩欧美高清dvd碟片| 丝袜国产日韩另类美女| 欧美在线一二三四区| 亚洲视频网在线直播| 丁香六月久久综合狠狠色| 国产亚洲午夜高清国产拍精品| 免费成人在线影院| 欧美一区二区视频观看视频| 午夜久久久久久久久久一区二区| 欧洲色大大久久| 亚洲影院理伦片| 欧美日韩国产综合久久| 亚洲国产综合在线| 欧美日韩国产中文| 男人操女人的视频在线观看欧美|