線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1413
推到 Plurk!
推到 Facebook!

[轉貼] 載入圖像到 DirectDraw(不用winapi的方法)

 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-15 11:07:57 IP:61.218.xxx.xxx 未訂閱
中國游戲技術資源網 http://www.gameres.com/Visual/2D/LoadBitmap1.htm      作者:udragon      

載入圖像到 DirectDraw(不用winapi的方法)

typedef struct BMPHD//bmp圖像信息結構
{
DWORD biSize;//bmp信息結構大小
LONG biWidth;//圖像寬度    LONG biHeight;//圖像高度
WORD biPlanes;//
WORD biBitCount;//顏色深度(8位以下都是調色板模式8位是256色調色板16    位是高彩24位是真彩32位是帶alpha通道的真彩)
DWORD biCompression;//是否壓縮
DWORD biSizeImage;//象素數據大小(以字節計算),為零時自己計算大小
LONG biXPelsPerMeter;//
LONG biYPelsPerMeter;//
DWORD biCirUsed;//調色板中包含的顏色數目
DWORD biCirImportant;//
}BMPIH,FAR *LPBMPIH,*PBBMPIF;
//其實這一類型結構vc++自帶,不用寫出來,BMPIH變為BITMAPINFOHEADER,
//這里只是為了說明這一結構的用法
typedef struct tagRGBQUAD
{
BYTE Blue;
BYTE Green;
BYTE Red;
BYTE reserve;//沒有用
}RGBQUAD;
//RGBQUAD rgb[x];有調色板中包含的顏色數目為x    BMPIH bmpfh;//BITMAPINFOHEADER bmpfh;    ifstream bmpf(filename,ios::in|ios::binary);
BITMAPFILEHEADER bmpfilehdr;
bmpf.seekg(sizeof(bmpfilehdr),ios::beg);//bmp文件頭,因為沒有用,直接跳過
bmpf.read((char *)&bmpfh,sizeof(bmpfh));//讀取文件頭
t=bmpfh.biSizeImage;
if(t==0)
t=((bmpfh.biWidth*(bmpfh.biBitCount/3) 3)&~3)*bmpfh.biHeight;//象素數據大小    (以字節計算)
if (bmpfh.biBitCount==8)
{
int ncolors;
if (bmpfh.biClrUsed==0)
ncolors=256;
else
ncolors=bmpfh.biClrUsed;    RGBQUAD* quad=new RGBQUAD[ncolors];
bmpf.read( (char*)quad, sizeof(RGBQUAD)*ncolors );
CreatePalette( quad, ncolors );//如果表面也是調色板模式的才能使用這    一句
delete [] quad;
}
//bmp文件每一行都是以4的倍數存儲,512沒有這個問題
bmpb=new char[t];    bmpf.seekg(sizeof(bmpfilehdr) bmpfh.biSize,ios::beg);//跳到數據區    bmpf.read(bmpb,t));
bmpf.close();    //注意讀入的圖象深度應與表面的深度相同,否則這里就要進行格式轉換(這里就不    講了)
DDSURFACEDESC2 desc;
  ZeroMemory( &desc, sizeof(desc) );
  desc.dwSize = sizeof(desc);
  HRESULT r=surf->Lock( 0, &desc, DDLOCK_WAIT | DDLOCK_WRITEONLY, 0 );
  if (r==DDERR_SURFACELOST){surf->Restore();return;}      BYTE*surfbits=(BYTE*)desc.lpSurface;
  BYTE *rc=bmpb t;//到緩衝區最后
  int i;
  for(i=0;iUnlock( 0 );
 
 
 
時間就是金錢---[ 發問前請先找找舊文章] 發表人 - axsoft 於 2002/08/15 11:09:13
系統時間:2024-04-26 6:32:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!