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

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

?? demo7_11.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// DEMO7_11.CPP 16-bit bitmap loading demo

// INCLUDES ///////////////////////////////////////////////

#define WIN32_LEAN_AND_MEAN  // just say no to MFC

#define INITGUID

#include <windows.h>   // include important windows stuff
#include <windowsx.h> 
#include <mmsystem.h>
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h> 
#include <math.h>
#include <io.h>
#include <fcntl.h>

#include <ddraw.h> // include directdraw

// DEFINES ////////////////////////////////////////////////

// defines for windows 
#define WINDOW_CLASS_NAME "WINCLASS1"

// default screen size
#define SCREEN_WIDTH    640  // size of screen
#define SCREEN_HEIGHT   480
#define SCREEN_BPP      16   // bits per pixel

#define BITMAP_ID            0x4D42 // universal id for a bitmap
#define MAX_COLORS_PALETTE   256

// TYPES //////////////////////////////////////////////////////

// basic unsigned types
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char  UCHAR;
typedef unsigned char  BYTE;

// container structure for bitmaps .BMP file
typedef struct BITMAP_FILE_TAG
        {
        BITMAPFILEHEADER bitmapfileheader;  // this contains the bitmapfile header
        BITMAPINFOHEADER bitmapinfoheader;  // this is all the info including the palette
        PALETTEENTRY     palette[256];      // we will store the palette here
        UCHAR            *buffer;           // this is a pointer to the data

        } BITMAP_FILE, *BITMAP_FILE_PTR;

// PROTOTYPES  //////////////////////////////////////////////

int Flip_Bitmap(UCHAR *image, int bytes_per_line, int height);

int Load_Bitmap_File(BITMAP_FILE_PTR bitmap, char *filename);

int Unload_Bitmap_File(BITMAP_FILE_PTR bitmap);

// MACROS /////////////////////////////////////////////////

// tests if a key is up or down
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

// initializes a direct draw struct
#define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }

// this builds a 16 bit color value in 5.5.5 format (1-bit alpha mode)
#define _RGB16BIT555(r,g,b) ((b & 31) + ((g & 31) << 5) + ((r & 31) << 10))

// this builds a 16 bit color value in 5.6.5 format (green dominate mode)
#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))

// this builds a 32 bit color value in A.8.8.8 format (8-bit alpha mode)
#define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))

// GLOBALS ////////////////////////////////////////////////

HWND      main_window_handle = NULL; // globally track main window
int       window_closed      = 0;    // tracks if window is closed
HINSTANCE hinstance_app      = NULL; // globally track hinstance

// directdraw stuff

LPDIRECTDRAW7         lpdd         = NULL;   // dd object
LPDIRECTDRAWSURFACE7  lpddsprimary = NULL;   // dd primary surface
LPDIRECTDRAWSURFACE7  lpddsback    = NULL;   // dd back surface
LPDIRECTDRAWPALETTE   lpddpal      = NULL;   // a pointer to the created dd palette
LPDIRECTDRAWCLIPPER   lpddclipper  = NULL;   // dd clipper
PALETTEENTRY          palette[256];          // color palette
PALETTEENTRY          save_palette[256];     // used to save palettes
DDSURFACEDESC2        ddsd;                  // a direct draw surface description struct
DDBLTFX               ddbltfx;               // used to fill
DDSCAPS2              ddscaps;               // a direct draw surface capabilities struct
HRESULT               ddrval;                // result back from dd calls
DWORD                 start_clock_count = 0; // used for timing

BITMAP_FILE           bitmap;                // holds the bitmap

char buffer[80];                             // general printing buffer

// FUNCTIONS ////////////////////////////////////////////////

int Load_Bitmap_File(BITMAP_FILE_PTR bitmap, char *filename)
{
// this function opens a bitmap file and loads the data into bitmap

int file_handle,  // the file handle
    index;        // looping index

UCHAR   *temp_buffer = NULL; // used to convert 24 bit images to 16 bit
OFSTRUCT file_data;          // the file data information

// open the file if it exists
if ((file_handle = OpenFile(filename,&file_data,OF_READ))==-1)
   return(0);

// now load the bitmap file header
_lread(file_handle, &bitmap->bitmapfileheader,sizeof(BITMAPFILEHEADER));

// test if this is a bitmap file
if (bitmap->bitmapfileheader.bfType!=BITMAP_ID)
   {
   // close the file
   _lclose(file_handle);

   // return error
   return(0);
   } // end if

// now we know this is a bitmap, so read in all the sections

// first the bitmap infoheader

// now load the bitmap file header
_lread(file_handle, &bitmap->bitmapinfoheader,sizeof(BITMAPINFOHEADER));

// now load the color palette if there is one
if (bitmap->bitmapinfoheader.biBitCount == 8)
   {
   _lread(file_handle, &bitmap->palette,MAX_COLORS_PALETTE*sizeof(PALETTEENTRY));

   // now set all the flags in the palette correctly and fix the reversed 
   // BGR RGBQUAD data format
   for (index=0; index < MAX_COLORS_PALETTE; index++)
       {
       // reverse the red and green fields
       int temp_color                = bitmap->palette[index].peRed;
       bitmap->palette[index].peRed  = bitmap->palette[index].peBlue;
       bitmap->palette[index].peBlue = temp_color;
       
       // always set the flags word to this
       bitmap->palette[index].peFlags = PC_NOCOLLAPSE;
       } // end for index

    } // end if

// finally the image data itself
_lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);

// now read in the image, if the image is 8 or 16 bit then simply read it
// but if its 24 bit then read it into a temporary area and then convert
// it to a 16 bit image

if (bitmap->bitmapinfoheader.biBitCount==8 || bitmap->bitmapinfoheader.biBitCount==16 || 
    bitmap->bitmapinfoheader.biBitCount==24)
   {
   // delete the last image if there was one
   if (bitmap->buffer)
       free(bitmap->buffer);

   // allocate the memory for the image
   if (!(bitmap->buffer = (UCHAR *)malloc(bitmap->bitmapinfoheader.biSizeImage)))
      {
      // close the file
      _lclose(file_handle);

      // return error
      return(0);
      } // end if

   // now read it in
   _lread(file_handle,bitmap->buffer,bitmap->bitmapinfoheader.biSizeImage);

   } // end if
else
   {
   // serious problem
   return(0);

   } // end else

#if 0
// write the file info out 
printf("\nfilename:%s \nsize=%d \nwidth=%d \nheight=%d \nbitsperpixel=%d \ncolors=%d \nimpcolors=%d",
        filename,
        bitmap->bitmapinfoheader.biSizeImage,
        bitmap->bitmapinfoheader.biWidth,
        bitmap->bitmapinfoheader.biHeight,
		bitmap->bitmapinfoheader.biBitCount,
        bitmap->bitmapinfoheader.biClrUsed,
        bitmap->bitmapinfoheader.biClrImportant);
#endif

// close the file
_lclose(file_handle);

// flip the bitmap
Flip_Bitmap(bitmap->buffer, 
            bitmap->bitmapinfoheader.biWidth*(bitmap->bitmapinfoheader.biBitCount/8), 
            bitmap->bitmapinfoheader.biHeight);

// return success
return(1);

} // end Load_Bitmap_File

///////////////////////////////////////////////////////////

int Unload_Bitmap_File(BITMAP_FILE_PTR bitmap)
{
// this function releases all memory associated with "bitmap"
if (bitmap->buffer)
   {
   // release memory
   free(bitmap->buffer);

   // reset pointer
   bitmap->buffer = NULL;

   } // end if

// return success
return(1);

} // end Unload_Bitmap_File

///////////////////////////////////////////////////////////

int Flip_Bitmap(UCHAR *image, int bytes_per_line, int height)
{
// this function is used to flip bottom-up .BMP images

UCHAR *buffer; // used to perform the image processing
int index;     // looping index

// allocate the temporary buffer
if (!(buffer = (UCHAR *)malloc(bytes_per_line*height)))
   return(0);

// copy image to work area
memcpy(buffer,image,bytes_per_line*height);

// flip vertically
for (index=0; index < height; index++)
    memcpy(&image[((height-1) - index)*bytes_per_line],
           &buffer[index*bytes_per_line], bytes_per_line);

// release the memory
free(buffer);

// return success
return(1);

} // end Flip_Bitmap

///////////////////////////////////////////////////////////////

LRESULT CALLBACK WindowProc(HWND hwnd, 
						    UINT msg, 
                            WPARAM wparam, 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产露脸91国语对白| 精品处破学生在线二十三| 色综合网站在线| 久久99精品一区二区三区三区| 亚洲综合免费观看高清完整版 | 亚洲视频每日更新| 国产精品成人免费精品自在线观看 | 欧美日韩一区视频| 欧美成人性战久久| 亚洲柠檬福利资源导航| 天天av天天翘天天综合网色鬼国产 | 国产一区二区三区免费观看| av一区二区三区四区| 欧美精品tushy高清| 久久精品人人做| 午夜精品福利一区二区蜜股av | 精品久久国产97色综合| 亚洲日本免费电影| 久久精品久久综合| 在线观看视频一区二区| 精品少妇一区二区三区在线视频| 亚洲女爱视频在线| 国产麻豆一精品一av一免费| 欧美三级中文字幕| 国产日韩欧美一区二区三区综合| 亚洲第一搞黄网站| k8久久久一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲 | 日韩欧美中文字幕一区| 亚洲伦理在线免费看| 国产一区视频在线看| 欧美久久高跟鞋激| 亚洲人成7777| 成人综合在线视频| 日韩欧美一级精品久久| 亚洲一区二区中文在线| 国模少妇一区二区三区| 91精品国产91久久久久久最新毛片| 亚洲精品视频在线观看网站| 国产成a人亚洲| 日韩视频在线一区二区| 午夜精品一区在线观看| 91久久国产最好的精华液| 国产精品美女久久久久aⅴ| 久久97超碰色| 日韩久久精品一区| 五月天精品一区二区三区| 91精品91久久久中77777| 国产精品麻豆视频| 成人av电影在线观看| 欧美激情一区二区三区全黄| 国产伦精品一区二区三区免费迷| 色综合视频在线观看| 国产精品久久久久久久岛一牛影视| 国产成人av电影| 欧美一区三区二区| 国产精品女人毛片| youjizz久久| 亚洲日本青草视频在线怡红院| 97精品电影院| 色吊一区二区三区| 亚洲成人动漫精品| 欧美一区二区三区电影| 麻豆极品一区二区三区| 欧美大片在线观看一区| 蜜臀av亚洲一区中文字幕| 日韩欧美一区二区在线视频| 久久不见久久见免费视频7| 欧美日韩中文国产| 免费看欧美女人艹b| 精品粉嫩aⅴ一区二区三区四区| 亚洲影院理伦片| 欧美在线一区二区| 日韩国产精品久久久| 丝袜美腿高跟呻吟高潮一区| 久久国产精品色婷婷| 精品国产三级a在线观看| 激情都市一区二区| 国产欧美日韩另类视频免费观看| 成人性生交大片免费看中文网站| 亚洲国产成人私人影院tom| 国产成人精品亚洲777人妖| 国产精品人妖ts系列视频| 99麻豆久久久国产精品免费| 亚洲日本青草视频在线怡红院 | 亚洲美女电影在线| 91精品国产综合久久久久久久久久 | 国产福利一区二区| 一区二区三区不卡视频| 欧美r级电影在线观看| 97久久久精品综合88久久| 天天av天天翘天天综合网色鬼国产 | 一区二区成人在线| 精品国产1区2区3区| 99r国产精品| 久久精品国内一区二区三区| 亚洲三级电影全部在线观看高清| 欧美一区二区三区在线视频| 成人午夜视频福利| 蜜桃视频第一区免费观看| 国产精品久久一卡二卡| 日韩免费观看2025年上映的电影| 不卡一区中文字幕| 免费久久精品视频| 亚洲免费在线视频| 久久久国产精品麻豆| 精品视频在线看| 91亚洲精品久久久蜜桃网站| 精品一区二区三区在线观看国产| 亚洲另类在线制服丝袜| 久久一区二区三区四区| 欧美日韩在线三区| 91丨porny丨最新| 韩国精品一区二区| 国产精品高潮呻吟| 久久精品视频一区| 精品国产亚洲在线| 在线影院国内精品| 99这里只有久久精品视频| 韩国成人精品a∨在线观看| 亚洲成人av在线电影| 有坂深雪av一区二区精品| 国产精品久久精品日日| xf在线a精品一区二区视频网站| 欧美日韩精品福利| 欧洲国内综合视频| 91麻豆文化传媒在线观看| 成人一区在线观看| 国产精品888| 国产精品一色哟哟哟| 狠狠色伊人亚洲综合成人| 捆绑变态av一区二区三区| 亚洲成人免费观看| 午夜伊人狠狠久久| 婷婷六月综合亚洲| 香蕉成人伊视频在线观看| 亚洲成a天堂v人片| 亚洲成av人**亚洲成av**| 亚洲一区在线视频| 性做久久久久久免费观看| 亚洲成人福利片| 日韩电影在线观看一区| 美女尤物国产一区| 国产精品中文字幕日韩精品 | 欧美精品v国产精品v日韩精品 | 日韩激情在线观看| 日韩黄色免费电影| 免费人成精品欧美精品| 日本不卡一区二区| 久久99久久99小草精品免视看| 久久99久国产精品黄毛片色诱| 国产精品1024| 99久久夜色精品国产网站| 色婷婷亚洲婷婷| 欧美日韩国产高清一区二区三区| 欧美人与性动xxxx| 久久先锋影音av鲁色资源网| 国产欧美一区二区精品性| 国产精品乱子久久久久| 亚洲黄色小视频| 麻豆免费精品视频| 国产东北露脸精品视频| 欧美最猛黑人xxxxx猛交| 在线成人免费视频| 久久久久88色偷偷免费| 中文字幕在线一区二区三区| 亚洲制服欧美中文字幕中文字幕| 日韩精品一卡二卡三卡四卡无卡| 国产一区在线不卡| 国产91色综合久久免费分享| 99riav一区二区三区| 91麻豆精品国产| 久久精品亚洲麻豆av一区二区| 国产精品免费免费| 日韩精品电影在线观看| 国产高清精品久久久久| 在线免费不卡视频| 精品第一国产综合精品aⅴ| 国产精品视频线看| 亚洲一区二区视频| 国产在线精品不卡| 91久久精品网| 国产欧美视频在线观看| 亚洲激情图片一区| 国产一区二区三区免费看| 欧美亚洲自拍偷拍| 欧美一区二区三区播放老司机| 亚洲精品一区二区三区在线观看| 亚洲欧洲制服丝袜| 国产精品一级黄| 色老汉一区二区三区| 久久综合九色综合欧美亚洲| 亚洲综合在线五月| 国产成人激情av| 欧美久久久久中文字幕| 亚洲图片你懂的| 精品一区二区三区日韩| 欧美色视频一区| 亚洲一区二区三区激情| 91丝袜高跟美女视频|