试一试以下这段程序:
//用Bitmap简化Image1图文件语句
Graphics::TBitmap *Bitmap = Image1->Picture->Bitmap;
//取得指定文件的完整路径
char cdir[MAX_PATH];
char *bfile = "//BIT-8-256.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(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);