帮忙VC代码转DELPHI

yangar9179 2012-09-14 01:25:29
帮忙VC代码转DELPHI
HBITMAP Csample_BioneFPAPIDlg::BMPDataBufferToHBITMAP(char * m_pBMPBuffer)
{
HBITMAP hBmp;
LPSTR hDIB,lpBuffer = m_pBMPBuffer;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen;

bmfHeaderLen = sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
//if (bmfHeader.bfType != ((WORD) ('M' << 8) | 'B')) return NULL;
if (bmfHeader.bfType != (*(WORD*)"BM")) return NULL;//我copy《Windows程序设计》上的做法。
hDIB = lpBuffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
/*
int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount;
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
*///原来的代码
lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits;//这行功能和上面被注释掉的代码相同,容易理解。
CClientDC dc(this);
hBmp = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
//dc.DeleteDC();
//dc.DeleteDC();
return hBmp;
}

void Csample_BioneFPAPIDlg::GetBmpFileDataFromPictureData(unsigned char * bmpfiledata, unsigned char * bmpdata, int bmpwidth, int bmpheight)
{
int m_WidthOfModel = bmpwidth;
int m_HeightOfModel = bmpheight;
BITMAPFILEHEADER bmfHdr; //定义文件头
BITMAPINFOHEADER bmiHdr; //定义信息头
RGBQUAD rgbQuad[256]; //定义调色板
//对信息头进行赋值
bmiHdr.biSize = sizeof(BITMAPINFOHEADER);
bmiHdr.biWidth = m_WidthOfModel;
bmiHdr.biHeight = m_HeightOfModel;
bmiHdr.biPlanes = 1;
bmiHdr.biBitCount = 8;
bmiHdr.biCompression = BI_RGB;
bmiHdr.biSizeImage = m_WidthOfModel*m_HeightOfModel;
bmiHdr.biXPelsPerMeter = 0;
bmiHdr.biYPelsPerMeter = 0;
bmiHdr.biClrUsed = 0;
bmiHdr.biClrImportant = 0;
//对调色板进行赋值
for( int i=0; i<256; i++)
{
rgbQuad[i].rgbBlue = (BYTE)i;
rgbQuad[i].rgbGreen = (BYTE)i;
rgbQuad[i].rgbRed = (BYTE)i;
rgbQuad[i].rgbReserved = 0;
}
//对文件头进行赋值
bmfHdr.bfType = (WORD)0x4D42;//;((WORD)('M'<<8) | 'B')
bmfHdr.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256 + m_WidthOfModel*m_HeightOfModel);
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits=(DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256);

int fileheaderlength = sizeof(BITMAPFILEHEADER);
int infoheaderlength = sizeof(BITMAPINFOHEADER);
int RGBQUADlength = sizeof(RGBQUAD)*256;
int begin = fileheaderlength+infoheaderlength+RGBQUADlength;
int end = m_WidthOfModel*m_HeightOfModel;
int a = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;
//CString ss;
//ss.Format(_T("%d"),begin);
//AfxMessageBox(ss);
memcpy(bmpfiledata,&bmfHdr,fileheaderlength);
memcpy(bmpfiledata+fileheaderlength,&bmiHdr,infoheaderlength);
memcpy(bmpfiledata+fileheaderlength+infoheaderlength,rgbQuad,RGBQUADlength);
memcpy(bmpfiledata+begin,bmpdata,end);
}
...全文
224 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangar9179 2012-09-20
  • 打赏
  • 举报
回复
僵哥你太强了。。牛啊!
僵哥 2012-09-14
  • 打赏
  • 举报
回复

//memcpy(bmpfiledata,&bmfHdr,fileheaderlength);
//memcpy(bmpfiledata+fileheaderlength,&bmiHdr,infoheaderlength);
//memcpy(bmpfiledata+fileheaderlength+infoheaderlength,rgbQuad,RGBQUADlength);
//memcpy(bmpfiledata+begin,bmpdata,end);

move(bmfHdr, PAnsiChar(bmpfiledata)^, fileheaderlength);
move(bmiHdr, PAnsiChar(LongWord(bmpfiledata) + fileheaderlength)^, infoheaderlength);
move(rgbQuad[0], PAnsiChar(LongWord(bmpfiledata) + fileheaderlength + infoheaderlength)^, RGBQUADlength);
move(bmpdata^, PAnsiChar(LongWord(bmpfiledata) + _begin)^, _end); //由于begin和end在Delphi当中为关键字,所以改用_begin和_end
yangar9179 2012-09-14
  • 打赏
  • 举报
回复
memcpy(bmpfiledata,&bmfHdr,fileheaderlength);
memcpy(bmpfiledata+fileheaderlength,&bmiHdr,infoheaderlength);
memcpy(bmpfiledata+fileheaderlength+infoheaderlength,rgbQuad,RGBQUADlength);
memcpy(bmpfiledata+begin,bmpdata,end);

就差这部分没有转过去了。。怎么没有人回答呢?
yangar9179 2012-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

好些类型没见过,DelPhi也有相应对应才行吧。。
[/Quote]
嗯是的。结构体的重写。都是VC中是自带的。
hsfzxjy 2012-09-14
  • 打赏
  • 举报
回复
好些类型没见过,DelPhi也有相应对应才行吧。。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧