把我的步骤详细的贴出来:
var FFileHeader : PBitmapFileHeader;//文件头信息
FInfoHeader : PBitmapInfoHeader;//bmp头信息
FInfo : PBitmapInfo; //bmp信息
MappedFile: THandle;//映像文件信息
hFile: THANDLE;
Fdata
ointer;
FPixelStart
ointer;
Bitmap: HBitmap;//bmp句柄
buf
ointer;
begin
//打开文件
hFile := CreateFile(pchar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if ( hFile <> INVALID_HANDLE_VALUE ) then
begin
//创建一个映像文件
MappedFile := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil);
//得到映像文件指针
Fdata := MapViewOfFile(MappedFile, FILE_MAP_READ, 0, 0, 0);
//取得Bmp文件头信息
FFileHeader := FData;
//取得bmp信息
FInfoHeader := pointer (integer (FData) + sizeof (TBitmapFileHeader));
FInfo := pointer (FInfoHeader);
// 数据开始的指针位置
FPixelStart := pointer (integer(FData) + FFileHeader^.bfOffBits);
/////////////////重点在这里/////////////////////////////
//根据得到的BMP信息创建一个BitMap句柄
Bitmap:= CreateDIBSection(0, FInfo^, DIB_RGB_COLORS, buf, 0, 0);
//移动数据到buf指针,但总是报错。。。
move(FPixelStart,buf^,FInfo.bmiHeader.biSizeImage);
end;
//结束