永发信息网

StretchBlt如何获得源矩形(即想要插入的图片的)宽度及高度,用哪个函数

答案:2  悬赏:70  手机版
解决时间 2021-01-24 08:36
  • 提问者网友:风月客
  • 2021-01-24 05:37
StretchBlt如何获得源矩形(即想要插入的图片的)宽度及高度,用哪个函数
最佳答案
  • 五星知识达人网友:孤老序
  • 2021-01-24 06:20
函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。
x:逻辑单元x轴左上角坐标;
y:逻辑单元y轴左上角坐标;
nWidth: 设备矩形宽度;
nHeight:设备矩形高度;
pSrcDC: 源设备上下文;
xSrc :源矩形 x轴左上角坐标;
ySrc: 源矩形y 轴左上角坐标;
Specifies the x-coordinate (in logical units) of the upper-left corner of the source rectangle.
nSrcWidth:源矩形宽度;
nSrcHeight:源矩形高度
dwRop:指定要进行的光栅操作。
全部回答
  • 1楼网友:不如潦草
  • 2021-01-24 07:05
具体要看你是怎么载入图片的,一般有2种做法: 1是用Windows的API直接读取位图文件,这需要你清楚位图文件的构成。位图文件有3部分构成:   1位图文件头--BITMAPFILEHEADER,   2位图信息头--BITMAPINFOHEAD,   3是位图数据。   你要的东西就在位图信息头里,这里面有着位图详细的信息(位图大小,高和度都在里面),详细见MSDN,读取时用CFile类的Read函数就可以,读取位图文件的3部分后用StretchDIBits把位图写到你指定的用来做源的CDC设备上下文中,以后你调用StretchBlt时就有源矩形的宽度及高度了,这个方法做起来好麻烦的! 2创建一个与显示窗口兼容的DC,是用LoadImage函数载入位图得到一个HBITMAP的句柄,创建一个CBitmap类对象,用对象绑定前面的句柄,设置一个BITMAP变量bm,CMitmap类有个函数GetBitmap可以获得你要的信息(放入了bm中),把CBitmap对象放入到你创建的与显示窗口兼容的DC里,你就可以用StretchBlt函数了,注意源就是你创建的与窗口兼容的DC,这个方法比前面那个稍为简单点。但也麻烦! 最好的方法是用GDI+,建2个对象,一个Graphics对象,一个Imgae对象,你要的宽度和高度信息用Image对象的获取宽度和高度信息的函数就能得到,最主要的是建立Image对象超简单:Image myImage("你的位图文件名");把对象myImage传给Graphics对象,一下就能按你想的缩放来显示图片了! 最后给你一个方法2的代码,你变通下可以用的: ShowBMP(CDC* pDC) { //注意pDC是指你的显示窗口的设备上下文 CDC * pMemDC = new CDC; // 内存显示DC pMemDC->CreateCompatibleDC(pDC); // 创建与当前DC兼容的DC // 从位图文件中载入位图数据,并返回位图的句柄 //m_strFileName注意是你的位图文件名 HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), m_strFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); CBitmap bitmap; // CBitmap类对象 bitmap.Attach(hBitmap); // 绑定位图数据 BITMAP bm; // 到下面你要的信息已经放入变量bm中了 bitmap.GetBitmap(&bm); pMemDC->SelectObject(&bitmap); //这是把位图对象放入源DC中去 CRect rect; GetClientRect(rect); //这里是获取你的显示窗口的客户区 pMemDC->SetStretchBltMode(COLORONCOLOR); // 绘制位图 pDC->StretchBlt(0,0,rect.x,rect.y,pMemDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //delete pMemDC; } 代码我没验证,具体应用到你的工程要看你的理解了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯