关于BCB中StretchDIBits如何使用

zuojianyou 2010-09-13 10:24:45
如何将一个bmp文件如“1.bmp”用StretchDIBits API函数显示在Form上。请给个能显示效果的代码,马上结贴!
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ydlchina 2010-09-15
  • 打赏
  • 举报
回复
BCB 的Canvas封装的大部分的API,如果对api不熟悉使用它很方便
samchoy 2010-09-14
  • 打赏
  • 举报
回复
zzbinfo 2010-09-14
  • 打赏
  • 举报
回复
围观楼上一堆人
周药师 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 samchoy 的回复:]

深夜围观大牛斗法
[/Quote]
不贴代码 来围观?
逮住 散300分 再走
samchoy 2010-09-13
  • 打赏
  • 举报
回复
深夜围观大牛斗法
ccrun.com 2010-09-13
  • 打赏
  • 举报
回复
要这么说,用TBitmap,4行代码就搞定了。
Graphics::TBitmap *bmp = new Graphics::TBitmap;
bmp->LoadFromFile("D:\\ccrun\\123.bmp");
Canvas->Draw(0, 0, bmp);
delete bmp;
周药师 2010-09-13
  • 打赏
  • 举报
回复
用BitBlt几行代码就可以了


void __fastcall TForm1::Button2Click(TObject *Sender)
{
HDC hdc=GetDC(Form1->Handle);
HDC pDC=CreateCompatibleDC(hdc);
//前景图
HBITMAP actbit=(HBITMAP)LoadImage(NULL,"C:\\023.bmp",IMAGE_BITMAP,336,252,LR_LOADFROMFILE);
SelectObject(pDC,actbit);
BitBlt(hdc,0,0,336,252,pDC,0,0,SRCCOPY);
ReleaseDC(Form1->Handle,hdc);
DeleteDC(pDC);
}
//---------------------------------------------------------------------------
ccrun.com 2010-09-13
  • 打赏
  • 举报
回复
火速看帖,果断回复!
//---------------------------------------------------------------------------
BOOL __stdcall CrnDrawBitmapToHDC(LPCTSTR lpBmpFile, HDC hdc)
{
HBITMAP hBmp = (HBITMAP)::LoadImage(
0,
lpBmpFile,
IMAGE_BITMAP,
0,
0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE);

BITMAP bmp;
::GetObject(hBmp, sizeof(BITMAP), (LPVOID) &bmp);

int nColors = (1 << bmp.bmBitsPixel);
if (nColors > 256)
nColors = 0;

int nSizeInfo = sizeof(BITMAPINFO) + (nColors * sizeof(RGBQUAD));
LPBITMAPINFO lpBmpInfo = (LPBITMAPINFO)::GlobalAlloc(GMEM_FIXED, nSizeInfo);

lpBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpBmpInfo->bmiHeader.biWidth = bmp.bmWidth;
lpBmpInfo->bmiHeader.biHeight = bmp.bmHeight;
lpBmpInfo->bmiHeader.biPlanes = 1;
lpBmpInfo->bmiHeader.biBitCount = bmp.bmBitsPixel * bmp.bmPlanes;
lpBmpInfo->bmiHeader.biCompression = BI_RGB;
lpBmpInfo->bmiHeader.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;
lpBmpInfo->bmiHeader.biXPelsPerMeter = 0;
lpBmpInfo->bmiHeader.biYPelsPerMeter = 0;
lpBmpInfo->bmiHeader.biClrUsed = 0;
lpBmpInfo->bmiHeader.biClrImportant = 0;

RGBQUAD rgb[256];

if (nColors <= 256)
{
HDC hMemDC = ::CreateCompatibleDC(NULL);

HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBmp);
::GetDIBColorTable(hMemDC, 0, nColors, rgb);

for (int i = 0; i < nColors; ++i)
{
lpBmpInfo->bmiColors[i].rgbRed = rgb[i].rgbRed;
lpBmpInfo->bmiColors[i].rgbGreen = rgb[i].rgbGreen;
lpBmpInfo->bmiColors[i].rgbBlue = rgb[i].rgbBlue;
}

::SelectObject(hMemDC, hOldBitmap);
::DeleteDC(hMemDC);
}

::StretchDIBits(hdc,
0,
0,
bmp.bmWidth,
bmp.bmHeight,
0,
0,
bmp.bmWidth,
bmp.bmHeight,
bmp.bmBits,
lpBmpInfo,
DIB_RGB_COLORS,
SRCCOPY);

::DeleteObject(hBmp);

::GlobalFree(lpBmpInfo);

return TRUE;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCHAR szBmpFile[] = TEXT("D:\\ccrun\\222.bmp");
if (FileExists(szBmpFile))
{
HDC hdc = ::GetDC(Handle);
CrnDrawBitmapToHDC(szBmpFile, hdc);
::ReleaseDC(Handle, hdc);
}
else
{
ShowMessage("指定的位图文件木有找到!");
}
}

1,221

社区成员

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

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