這是書上所提供的API要套在我的程式裡…請各位先進幫忙看看那裡有問題!謝謝
//用Bitmap簡化Image1圖檔敘述
Graphics::TBitmap *Bitmap = Form2->Image1->Picture->Bitmap;
//取得指定檔案的完整路徑
char cdir[MAX_PATH];
char *bfile = "//gpsnew//image//中山高基隆端.bmp";
//將程式現在目錄所在填入此字元陣列
::GetCurrentDirectory( MAX_PATH, cdir);
//將現在目錄加上指定檔名
strcat( cdir, bfile);
//宣告圖檔結構
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
//開啟指定檔案
HANDLE HFile = ::CreateFile(cdir, GENERIC_READ,
0, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
//
if (HFile != INVALID_HANDLE_VALUE)
{
DWORD dwRead;
//取得圖檔結構之相關資料
::ReadFile(HFile, &bmfh, sizeof(BITMAPFILEHEADER), &dwRead, NULL);
::ReadFile(HFile, &bmih, sizeof(BITMAPINFOHEADER), &dwRead, NULL);
//建立一新暫時設定,以利圖檔16位元轉成8位元時的最適化
BITMAPINFO bmi;
//將bmi結構所在記憶體初始化
memset(&bmi, 0, sizeof(BITMAPINFO));
//BITMAPINFO結構包含BITMAPINFOHEADER結構 RGBQUAD結構
//設定BITMAPINFOHEADER結構成員
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);//結構大小
bmi.bmiHeader.biWidth = Bitmap->Width;//圖素寬度
bmi.bmiHeader.biHeight = Bitmap->Height; //圖素高度
bmi.bmiHeader.biPlanes = 1;//目的裝置平面數,必為1
//轉換成 16 位元像素
bmi.bmiHeader.biBitCount = 16; // 16位元像素
bmi.bmiHeader = bmih;
//設定RGBQUAD結構成員
DWORD BitMasks[3];
BitMasks[0] = 0xFFFF;//Blue明亮度
BitMasks[1] = 0xFFFF;//Green明亮度
BitMasks[2] = 0xFFFF;//Red明亮度
//將設好的RGB結構填入RGBQUAD結構
memcpy(bmi.bmiColors, BitMasks, sizeof(BitMasks));
unsigned char *bits;
//將BITMAPINFO結構創造一新DIB圖檔,並傳回handle
//建立與指定DC相容的DC
HDC Hdc = ::CreateCompatibleDC(0);
//將BITMAPINFO結構創造一新DIB圖檔,並傳回handle
HBITMAP HBmp = ::CreateDIBitmap(Hdc, &bmih, CBM_INIT,
(BYTE *)sizeof(bmi) bmi.bmiHeader.biSize,
&bmi,
DIB_RGB_COLORS);
//建立與指定DC相容的DC
// HDC Hdc = ::CreateCompatibleDC(0);
//此處依照讀入圖檔之結構,繪出圖像至Form1的Image1中
HDC hdc = ::GetDC(Form2->Image1->Canvas->Handle);
//選定新物件,並傳回原有物件設定
// HBITMAP HOldBmp = ::SelectObject(Hdc, hdc);
if (HBmp)
{
//先由Image複製圖像至暫時設備
::BitBlt(hdc, 0, 0,
bmih.biWidth, bmih.biHeight,//Image1->Width*5, Image1->Height*5,//
Hdc, 0, 0,
SRCCOPY);
ShowMessage("成功讀取圖檔檔案!");
}
}
else
ShowMessage("讀取圖檔檔案失敗!");
//釋放handle
::CloseHandle(HFile);