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

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

?? dibhelp.c

?? widows編程例題程序13-18章
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*------------------------------------------
   DIBHELP.C -- DIB Section Helper Routines 
                (c) Charles Petzold, 1998
  ------------------------------------------*/

#define WINVER 0x0500
#include <windows.h>
#include "dibhelp.h"

#define HDIB_SIGNATURE (* (int *) "Dib ")

typedef struct
{
     PBYTE    * ppRow ;            // must be first field for macros!
     int        iSignature ;
     HBITMAP    hBitmap ;
     BYTE     * pBits ;
     DIBSECTION ds ;
     int        iRShift[3] ;
     int        iLShift[3] ;
}
DIBSTRUCT, * PDIBSTRUCT ;

/*---------------------------------------------------------------
   DibIsValid:  Returns TRUE if hdib points to a valid DIBSTRUCT
  ---------------------------------------------------------------*/

BOOL DibIsValid (HDIB hdib)
{
     PDIBSTRUCT pdib = hdib ;

     if (pdib == NULL)
          return FALSE ;

     if (IsBadReadPtr (pdib, sizeof (DIBSTRUCT)))
          return FALSE ;

     if (pdib->iSignature != HDIB_SIGNATURE)
          return FALSE ;

     return TRUE ;
}

/*-----------------------------------------------------------------------
   DibBitmapHandle:  Returns the handle to the DIB section bitmap object
  -----------------------------------------------------------------------*/

HBITMAP DibBitmapHandle (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return NULL ;
     
     return ((PDIBSTRUCT) hdib)->hBitmap ;
}

/*-------------------------------------------
   DibWidth:  Returns the bitmap pixel width
  -------------------------------------------*/

int DibWidth (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return 0 ;
     
     return ((PDIBSTRUCT) hdib)->ds.dsBm.bmWidth ;
}

/*---------------------------------------------
   DibHeight:  Returns the bitmap pixel height
  ---------------------------------------------*/

int DibHeight (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return 0 ; 
     
     return ((PDIBSTRUCT) hdib)->ds.dsBm.bmHeight ;
}

/*----------------------------------------------------
   DibBitCount:  Returns the number of bits per pixel
  ----------------------------------------------------*/

int DibBitCount (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return 0 ;
     
     return ((PDIBSTRUCT) hdib)->ds.dsBm.bmBitsPixel ;
}

/*--------------------------------------------------------------
   DibRowLength:  Returns the number of bytes per row of pixels
  --------------------------------------------------------------*/

int DibRowLength (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return 0 ;
     
     return 4 * ((DibWidth (hdib) * DibBitCount (hdib) + 31) / 32) ;
}

/*----------------------------------------------------------------
   DibNumColors:  Returns the number of colors in the color table
  ----------------------------------------------------------------*/

int DibNumColors (HDIB hdib)
{
     PDIBSTRUCT pdib = hdib ;

     if (!DibIsValid (hdib))
          return 0 ;

     if (pdib->ds.dsBmih.biClrUsed != 0)
     {
          return pdib->ds.dsBmih.biClrUsed ;
     }
     else if (DibBitCount (hdib) <= 8)
     {
          return 1 << DibBitCount (hdib) ;
     }
     return 0 ;
}

/*------------------------------------------
   DibMask:  Returns one of the color masks
  ------------------------------------------*/

DWORD DibMask (HDIB hdib, int i)
{
     PDIBSTRUCT pdib = hdib ;

     if (!DibIsValid (hdib) || i < 0 || i > 2)
          return 0 ;
     
     return pdib->ds.dsBitfields[i] ;
}

/*---------------------------------------------------
   DibRShift:  Returns one of the right-shift values
  ---------------------------------------------------*/

int DibRShift (HDIB hdib, int i)
{
     PDIBSTRUCT pdib = hdib ;

     if (!DibIsValid (hdib) || i < 0 || i > 2)
          return 0 ;
     
     return pdib->iRShift[i] ;
}

/*--------------------------------------------------
   DibLShift:  Returns one of the left-shift values
  --------------------------------------------------*/

int DibLShift (HDIB hdib, int i)
{
     PDIBSTRUCT pdib = hdib ;

     if (!DibIsValid (hdib) || i < 0 || i > 2)
          return 0 ;
     
     return pdib->iLShift[i] ;
}

/*---------------------------------------------------------------
   DibCompression:  Returns the value of the biCompression field
  ---------------------------------------------------------------*/

int DibCompression (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return 0 ;

     return ((PDIBSTRUCT) hdib)->ds.dsBmih.biCompression ;
}

/*--------------------------------------------------------------
   DibIsAddressable:  Returns TRUE if the DIB is not compressed
  --------------------------------------------------------------*/

BOOL DibIsAddressable (HDIB hdib)
{
     int iCompression ;

     if (!DibIsValid (hdib))
          return FALSE ;

     iCompression = DibCompression (hdib) ;

     if (iCompression == BI_RGB || iCompression == BI_BITFIELDS)
         return TRUE ;

     return FALSE ;
}

/*---------------------------------------------------------------------------
   These functions return the sizes of various components of the DIB section
     AS THEY WOULD APPEAR in a packed DIB. These functions aid in converting
     the DIB section to a packed DIB and in saving DIB files.
  ---------------------------------------------------------------------------*/

DWORD DibInfoHeaderSize (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return 0 ;

     return ((PDIBSTRUCT) hdib)->ds.dsBmih.biSize ;
}

DWORD DibMaskSize (HDIB hdib)
{
     PDIBSTRUCT pdib = hdib ;

     if (!DibIsValid (hdib))
          return 0 ;

     if (pdib->ds.dsBmih.biCompression == BI_BITFIELDS)
          return 3 * sizeof (DWORD) ;

     return 0 ;
}

DWORD DibColorSize (HDIB hdib)
{
     return DibNumColors (hdib) * sizeof (RGBQUAD) ;
} 

DWORD DibInfoSize (HDIB hdib)
{
     return DibInfoHeaderSize(hdib) + DibMaskSize(hdib) + DibColorSize(hdib) ;
}

DWORD DibBitsSize (HDIB hdib)
{
     PDIBSTRUCT pdib = hdib ;

     if (!DibIsValid (hdib))
          return 0 ;

     if (pdib->ds.dsBmih.biSizeImage != 0)
     {
          return pdib->ds.dsBmih.biSizeImage ;
     }
     return DibHeight (hdib) * DibRowLength (hdib) ;
}

DWORD DibTotalSize (HDIB hdib)
{
     return DibInfoSize (hdib) + DibBitsSize (hdib) ;
}

/*----------------------------------------------------------------------
   These functions return pointers to the various components of the DIB 
     section.
  ----------------------------------------------------------------------*/

BITMAPINFOHEADER * DibInfoHeaderPtr (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return NULL ;
     
     return & (((PDIBSTRUCT) hdib)->ds.dsBmih) ;
}

DWORD * DibMaskPtr (HDIB hdib)
{
     PDIBSTRUCT pdib = hdib ;

     if (!DibIsValid (hdib))
          return 0 ;

     return pdib->ds.dsBitfields ;
}

void * DibBitsPtr (HDIB hdib)
{
     if (!DibIsValid (hdib))
          return NULL ;
     
     return ((PDIBSTRUCT) hdib)->pBits ;
}

/*------------------------------------------------------
   DibSetColor:  Obtains entry from the DIB color table
  ------------------------------------------------------*/

BOOL DibGetColor (HDIB hdib, int index, RGBQUAD * prgb)
{
     PDIBSTRUCT pdib = hdib ;
     HDC        hdcMem ;
     int        iReturn ;

     if (!DibIsValid (hdib))
          return 0 ;

     hdcMem = CreateCompatibleDC (NULL) ;
     SelectObject (hdcMem, pdib->hBitmap) ;
     iReturn = GetDIBColorTable (hdcMem, index, 1, prgb) ;
     DeleteDC (hdcMem) ;

     return iReturn ? TRUE : FALSE ;
}

/*----------------------------------------------------
   DibGetColor:  Sets an entry in the DIB color table
  ----------------------------------------------------*/
 
BOOL DibSetColor (HDIB hdib, int index, RGBQUAD * prgb)
{
     PDIBSTRUCT pdib = hdib ;
     HDC        hdcMem ;
     int        iReturn ;

     if (!DibIsValid (hdib))
          return 0 ;

     hdcMem = CreateCompatibleDC (NULL) ;
     SelectObject (hdcMem, pdib->hBitmap) ;
     iReturn = SetDIBColorTable (hdcMem, index, 1, prgb) ;
     DeleteDC (hdcMem) ;

     return iReturn ? TRUE : FALSE ;
}

/*-----------------------------------------------------------------
   DibPixelPtr:  Returns a pointer to the pixel at position (x, y)
  -----------------------------------------------------------------*/

BYTE * DibPixelPtr (HDIB hdib, int x, int y)
{
     if (!DibIsAddressable (hdib))
          return NULL ;

     if (x < 0 || x >= DibWidth (hdib) || y < 0 || y >= DibHeight (hdib))
          return NULL ;

     return (((PDIBSTRUCT) hdib)->ppRow)[y] + (x * DibBitCount (hdib) >> 3) ;
}

/*-----------------------------------------------
   DibGetPixel:  Obtains a pixel value at (x, y)
  -----------------------------------------------*/

DWORD DibGetPixel (HDIB hdib, int x, int y)
{
     PBYTE pPixel ;

     if (!(pPixel = DibPixelPtr (hdib, x, y)))
          return 0 ;

     switch (DibBitCount (hdib))
     {
     case  1:  return 0x01 & (* pPixel >> (7 - (x & 7))) ;
     case  4:  return 0x0F & (* pPixel >> (x & 1 ? 0 : 4)) ;
     case  8:  return * pPixel ;
     case 16:  return * (WORD *) pPixel ;
     case 24:  return 0x00FFFFFF & * (DWORD *) pPixel ; 
     case 32:  return * (DWORD *) pPixel ;
     }
     return 0 ;
}

/*--------------------------------------------
   DibSetPixel:  Sets a pixel value at (x, y)
  --------------------------------------------*/

BOOL DibSetPixel (HDIB hdib, int x, int y, DWORD dwPixel)
{
     PBYTE pPixel ;

     if (!(pPixel = DibPixelPtr (hdib, x, y)))
          return FALSE ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91香蕉国产在线观看软件| 久久99精品国产91久久来源| 97se亚洲国产综合自在线| 国产精品美女一区二区在线观看| 大胆亚洲人体视频| 国产精品久久夜| 91浏览器打开| 亚洲va国产天堂va久久en| 欧美日韩精品高清| 久久精品国产999大香线蕉| 2024国产精品视频| 成人av在线电影| 樱花草国产18久久久久| 欧美日韩一区三区四区| 蜜桃免费网站一区二区三区| 久久综合久久久久88| 成人精品视频.| 亚洲一区免费视频| 日韩欧美激情在线| 成人精品免费网站| 亚洲国产中文字幕| 久久久蜜桃精品| 一本色道**综合亚洲精品蜜桃冫| 婷婷综合在线观看| 久久久久国产精品麻豆| 91网站在线观看视频| 日韩成人一级大片| 国产精品情趣视频| 在线观看国产日韩| 激情综合网最新| 一区二区三区四区亚洲| 欧美电视剧在线看免费| 一本大道久久a久久综合| 日韩av在线发布| 国产精品电影一区二区三区| 欧美性色综合网| 丰满少妇久久久久久久| 性做久久久久久免费观看欧美| 久久一二三国产| 欧美在线free| 国产99久久久国产精品潘金 | 精品福利在线导航| 国产99久久久国产精品潘金| 亚洲国产一区二区三区| 国产欧美日韩在线| 91精品国产免费| 91网站视频在线观看| 九色综合狠狠综合久久| 一级中文字幕一区二区| 精品国产1区二区| 欧美日韩久久久一区| 99热精品一区二区| 久久99精品国产麻豆婷婷洗澡| 亚洲宅男天堂在线观看无病毒| 久久综合精品国产一区二区三区 | 亚洲精品免费在线| 久久久久久夜精品精品免费| 欧美日本乱大交xxxxx| av在线一区二区| 国产精品一区二区在线看| 日韩成人精品在线| 一区二区三区四区不卡在线| 国产女人18毛片水真多成人如厕| 日韩欧美国产麻豆| 717成人午夜免费福利电影| 91免费国产视频网站| 东方欧美亚洲色图在线| 激情文学综合网| 美女在线观看视频一区二区| 亚洲主播在线观看| 亚洲主播在线播放| 亚洲一区免费观看| 香蕉影视欧美成人| 亚洲成在线观看| 亚洲国产你懂的| 亚洲大片一区二区三区| 亚洲国产成人va在线观看天堂| 亚洲精品乱码久久久久| 亚洲激情网站免费观看| 亚洲综合视频在线| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲黄色小说网站| 亚洲国产日韩综合久久精品| 亚洲综合在线第一页| 亚洲bt欧美bt精品| 日本视频一区二区三区| 免费观看久久久4p| 精品一区二区三区在线观看国产| 久久97超碰色| 国产成人午夜视频| 成人深夜视频在线观看| 97久久超碰国产精品| 色老头久久综合| 欧美日韩免费电影| 精品嫩草影院久久| 欧美国产成人精品| 亚洲精品乱码久久久久| 天堂va蜜桃一区二区三区| 捆绑紧缚一区二区三区视频| 国产一区二区三区在线观看免费| 国产精品一二三区| av在线播放一区二区三区| 在线看日本不卡| 欧美一级午夜免费电影| 国产视频视频一区| 亚洲综合av网| 精品亚洲成a人| 岛国精品在线播放| 欧美丰满少妇xxxxx高潮对白| 精品人在线二区三区| 日本一区二区三区在线不卡| 一区二区三区电影在线播| 青椒成人免费视频| www.欧美色图| 91精品国产色综合久久不卡电影| 久久久国产一区二区三区四区小说| 国产精品视频一二| 日本成人在线网站| 99久久婷婷国产综合精品| 欧美狂野另类xxxxoooo| 欧美国产精品劲爆| 日韩一区精品视频| www.久久久久久久久| 在线综合视频播放| 亚洲欧洲无码一区二区三区| 午夜av电影一区| 成人毛片视频在线观看| 91精品在线免费观看| 国产精品久久午夜夜伦鲁鲁| 日韩国产精品91| av成人老司机| 精品久久久久99| 亚洲在线视频一区| a在线播放不卡| 久久综合九色综合久久久精品综合| 亚洲综合免费观看高清在线观看| 国产精品自产自拍| 在线不卡一区二区| 亚洲女人的天堂| 国产伦精品一区二区三区免费 | 伊人开心综合网| 国产成人啪午夜精品网站男同| 欧美日韩aaaaa| 亚洲色图一区二区| 国产不卡在线播放| 欧美电视剧在线看免费| 午夜婷婷国产麻豆精品| 色综合天天综合给合国产| 国产亚洲短视频| 精品亚洲porn| 日韩精品一区二区三区在线播放 | 日韩成人午夜精品| 欧洲亚洲国产日韩| 亚洲日本va午夜在线电影| 国产麻豆精品在线| 日韩一区二区三区av| 亚洲bt欧美bt精品| 欧美日精品一区视频| 亚洲资源在线观看| 欧美自拍偷拍一区| 樱花草国产18久久久久| 一本色道久久综合精品竹菊| 中文字幕一区不卡| 91亚洲精品一区二区乱码| 国产精品色呦呦| 国产成人免费视频| 中文字幕av不卡| 播五月开心婷婷综合| 国产日本欧美一区二区| 国产91清纯白嫩初高中在线观看| 久久精品亚洲精品国产欧美| 久久www免费人成看片高清| 日韩一区二区电影网| 全国精品久久少妇| 欧美精品一区二区三区四区 | 伊人色综合久久天天| 色美美综合视频| 亚洲素人一区二区| 在线看不卡av| 日韩成人精品在线观看| 日韩亚洲欧美一区二区三区| 蜜臀91精品一区二区三区| 精品欧美乱码久久久久久1区2区| 国模一区二区三区白浆| 久久久99精品久久| 99精品视频免费在线观看| 亚洲欧洲综合另类| 欧美人伦禁忌dvd放荡欲情| 日本不卡一区二区| www日韩大片| 99久久久无码国产精品| 一区二区高清在线| 欧美久久久影院| 国产一区二区三区视频在线播放| 久久久精品tv| 色中色一区二区| 日本sm残虐另类| 国产精品女人毛片| 欧美系列日韩一区| 国产精品自拍一区|