能不能动态加载图片 我想自己加一个button控件 然后用CFileDialog 选择一张图片 加载到 程序的一个位图控件中 怎么实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以的,用LoadImage加载图片,对于位图控件有一个方法:SetBitmap,可以用来设置图片。 void CRotateImage::OnBtLoad() { CFileDialog flDlg(TRUE,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位图文件|*.bmp||",this); if (flDlg.DoModal()==IDOK) { CString csFileName = flDlg.GetPathName(); m_SrcFile = flDlg.GetPathName(); m_BmpName.SetWindowText(csFileName); if (m_hBmp != NULL) { DeleteObject(m_hBmp); m_hBmp = NULL; } m_hBmp = (HBITMAP)LoadImage(NULL,csFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); if (m_hBmp) { m_Image.SetBitmap(m_hBmp); m_bLoaded = TRUE; } CFile file; file.Open(csFileName,CFile::modeRead); file.Read(&m_bmFileHeader,sizeof(BITMAPFILEHEADER)); file.Read(&m_bmInfoHeader,sizeof(BITMAPINFOHEADER)); int szPalette = 0; if (m_bmInfoHeader.biBitCount != 24) { file.Close(); MessageBox("请选择真彩色位图!","提示"); return; } int nBmpData = m_bmInfoHeader.biSizeImage; if (m_pBmpData != NULL) { delete []m_pBmpData; m_pBmpData = NULL; } m_pBmpData = new BYTE[nBmpData]; file.ReadHuge(m_pBmpData,nBmpData); file.Close(); int sizeofbuffer = m_bmInfoHeader.biWidth * m_bmInfoHeader.biHeight * 4; int externWidth; externWidth = m_bmInfoHeader.biWidth * 3; if(externWidth % 4 != 0) externWidth = 4 - externWidth % 4; else externWidth = 0; int k = 0; BYTE* m_pImageTempBuffer = new BYTE[sizeofbuffer]; for (int n = m_bmInfoHeader.biHeight - 1; n >= 0; n--) { for (UINT m = 0; m < m_bmInfoHeader.biWidth * 3; m += 3) { m_pImageTempBuffer[k] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m]; //blue m_pImageTempBuffer[k+1] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+1];//green m_pImageTempBuffer[k+2] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+2];//red m_pImageTempBuffer[k+3] = 255; k += 4; } } delete []m_pBmpData; m_pBmpData = new BYTE[sizeofbuffer]; memcpy(m_pBmpData, m_pImageTempBuffer, sizeofbuffer); delete []m_pImageTempBuffer; //设置滚动范围 CRect bmpRC,wndRC; m_ImagePanel.GetClientRect(wndRC); m_Image.GetClientRect(bmpRC); m_ImagePanel.OnHScroll(SB_LEFT, 1, NULL); m_ImagePanel.OnVScroll(SB_LEFT, 1, NULL); m_ImagePanel.SetScrollRange(SB_VERT,0,bmpRC.Height()-wndRC.Height()); m_ImagePanel.SetScrollRange(SB_HORZ,0,bmpRC.Width()-wndRC.Width()); } } 调用对话框资源 关于调试的问题 新手提问~~VC++6.0问题,有关类的 为什么不是指针了。 上次发帖没有解决好的问题,有点难度,请高手请来指点一下,和我一样不明白的,大家一起来学习一下哈! 有好书吗? 谈谈关于工作的事情(当然有分拿) 如何把文件和目录打包成一个文件,是否是在程序中调用其他的压缩程序,如arj等 游戏编程中需要多少图形学方面的知识? unicode 与 ansi 之间转换的问题,急!!!! 怎么得到浏览器首屏的元素? 我想做一个VC源程序编辑器
void CRotateImage::OnBtLoad()
{
CFileDialog flDlg(TRUE,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位图文件|*.bmp||",this);
if (flDlg.DoModal()==IDOK)
{
CString csFileName = flDlg.GetPathName();
m_SrcFile = flDlg.GetPathName();
m_BmpName.SetWindowText(csFileName);
if (m_hBmp != NULL)
{
DeleteObject(m_hBmp);
m_hBmp = NULL;
}
m_hBmp = (HBITMAP)LoadImage(NULL,csFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (m_hBmp)
{
m_Image.SetBitmap(m_hBmp);
m_bLoaded = TRUE;
}
CFile file;
file.Open(csFileName,CFile::modeRead);
file.Read(&m_bmFileHeader,sizeof(BITMAPFILEHEADER));
file.Read(&m_bmInfoHeader,sizeof(BITMAPINFOHEADER));
int szPalette = 0;
if (m_bmInfoHeader.biBitCount != 24)
{
file.Close();
MessageBox("请选择真彩色位图!","提示");
return;
}
int nBmpData = m_bmInfoHeader.biSizeImage;
if (m_pBmpData != NULL)
{
delete []m_pBmpData;
m_pBmpData = NULL;
}
m_pBmpData = new BYTE[nBmpData]; file.ReadHuge(m_pBmpData,nBmpData);
file.Close();
int sizeofbuffer = m_bmInfoHeader.biWidth * m_bmInfoHeader.biHeight * 4;
int externWidth;
externWidth = m_bmInfoHeader.biWidth * 3;
if(externWidth % 4 != 0)
externWidth = 4 - externWidth % 4;
else
externWidth = 0;
int k = 0;
BYTE* m_pImageTempBuffer = new BYTE[sizeofbuffer]; for (int n = m_bmInfoHeader.biHeight - 1; n >= 0; n--)
{
for (UINT m = 0; m < m_bmInfoHeader.biWidth * 3; m += 3)
{
m_pImageTempBuffer[k] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m]; //blue
m_pImageTempBuffer[k+1] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+1];//green
m_pImageTempBuffer[k+2] = m_pBmpData[n*(m_bmInfoHeader.biWidth*3+externWidth)+m+2];//red
m_pImageTempBuffer[k+3] = 255;
k += 4;
}
} delete []m_pBmpData;
m_pBmpData = new BYTE[sizeofbuffer];
memcpy(m_pBmpData, m_pImageTempBuffer, sizeofbuffer); delete []m_pImageTempBuffer; //设置滚动范围
CRect bmpRC,wndRC;
m_ImagePanel.GetClientRect(wndRC);
m_Image.GetClientRect(bmpRC); m_ImagePanel.OnHScroll(SB_LEFT, 1, NULL);
m_ImagePanel.OnVScroll(SB_LEFT, 1, NULL); m_ImagePanel.SetScrollRange(SB_VERT,0,bmpRC.Height()-wndRC.Height());
m_ImagePanel.SetScrollRange(SB_HORZ,0,bmpRC.Width()-wndRC.Width());
}
}