VC中怎样把位图加入资源,还有位图是怎么制作的?

VC中怎样把位图加入资源,还有位图是怎么制作的?,第1张

资源视图下面,右键——插入,选择BITMAP,右边会有一个绘图窗口,你可以画,也可以右键-引入,导入一个位图

位图的制作很简单,用windows自带的画图工具就可以,打开一幅图片,另存为,选择BMP格式,24位真彩色

你用的两种方法都是错误的,正确的加载方式是选择导入(import),而非选择new(新建)

导入的话不需要选择类型,系统会自动在工程的resources树上形成一个同bitmap同级别的JPG的filter

你导入后需要用CImage类,下面是加载的方法和我用的函数

C/C++ code?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

m_pImage = new CImage()

ImageFromIDResource(*m_pImage, IDB_PNG_IDISK, _T("PNG"))

HBITMAP hBitmap = m_pImage->Detach()

m_statBitmap.SetBitmap(hBitmap)

void ImageFromIDResource(CImage&image, UINT nID, LPCTSTR lpType)

{

HINSTANCE hInst = AfxGetResourceHandle()

HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),lpType)

if(hRsrc == NULL)

return

DWORD dwLen = SizeofResource(hInst, hRsrc)

BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc)

if (!lpRsrc)

return

HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, dwLen)

BYTE* pmem = (BYTE*)GlobalLock(m_hMem)

memcpy(pmem,lpRsrc,dwLen)

IStream* pstm

CreateStreamOnHGlobal(m_hMem,FALSE,&pstm)

image.Load(pstm)

GlobalUnlock(m_hMem)

pstm->Release()

FreeResource(lpRsrc)

}

VC中图片插入和位图 *** 作

一.在程序中插入JPG图片Graphics graphics(hDC)

WCHAR strBKG[256]

Image* m_imgBKCString strBK=theApp.m_strStartPath + "\\topoBK.JPG"//1

BSTR bstrBK = strBK.AllocSysString()//2

wcscpy(strBKG, bstrBK)//3

this->m_imgBK = new Image(strBKG)//4

CRect rect

this->GetClientRect(&rect)

RectF rc(rect.TopLeft().x , rect.TopLeft().y , rect.Width() , rect.Height())

graphics.DrawImage(this->m_imgBK,rc)二. *** 作BMP图片2.1 加载自定义的位图CBitmap m_Bitmap

m_Bitmap.LoadBitmap(IDB_BITMAP3) CDC MemDC

MemDC.CreateCompatibleDC(NULL)

MemDC.SelectObject(&m_Bitmap) CClientDC CliendDC(this)

BITMAP BM

m_Bitmap.GetObject(sizeof(BM),&BM) CliendDC.BitBlt(100,100,BM.bmWidth,BM.bmHeight,&MemDC,0,0,SRCCOPY)// CliendDC.StretchBlt(400,400,30,30,&MemDC,0,0,BM.bmWidth,BM.bmHeight,SRCCOPY)//缩小比例2.2 加载插入的位图:插入BMP文件方式:把要插入的图片放在资源文件夹里,然后导入,当图片质量高时,不能预览,但是在资源视图里面已经存在,然后可以像自定义位图那样使用。===============================Windows中位图有两种格式,一种是“设备相关”位图(Device Depend Bitmap,DDB),另一种是“设备无关”位图(Device Independ Bitmap,DIB)。 一、DDB位图的显示 DDB位图的显示很简单,将文件内容拷贝到内存中,然后可以很方便地将它粘贴到相关设备中,用BitBlt函数直接显示。首先改写视图类中的OnFileOpen()函数,从文件装载位图到内存中。m_pBmp是CBitmap指针变量,得到该指针后,就可以在OnDraw()函数中显示位图了。 voidCBmpDemoView::OnFileOpen()在VC中使用CBitmap类必须将BMP位图装入资源中,然后通过类 CBitmap的成员函数使用它,在通过CDC类的成员函数 *** 作它。如果你希望在每个结点前添加一个小图标,就必需先调用CTreeCtrl类的成员函数CImageList* SetImageList( CImageList * pImageList, intnImageListType ),指明当前控件所使用的图像列表(ImageList),nImageListType为TVSIL_NORMAL。在调用完成后控件中使用图片以设置的ImageList中图片为准。然后调用HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent =TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST)添加结点,其中参数nImage为结点没被选中时所使用图片序号,nSelectedImage为结点被选中时所使用图片序号。m_wndTree.SetBkImage(IDB_TREE_BACKGROUND)

凡窝技术论坛提供


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11826304.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存