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

 我来答
yeyingting
2011-08-20 · 超过18用户采纳过TA的回答
知道答主
回答量:25
采纳率:0%
帮助的人:32.6万
展开全部
具体要看你是怎么载入图片的,一般有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;
}
代码我没验证,具体应用到你的工程要看你的理解了
追问
多谢了,插入bmp的我已经搞定了,同样的问题JPG格式的图片怎么处理你有没有资料
追答
OleLoadPicture(
IStream * pStream,
LONG ISize,
BOOL fRunmode,
REFIID riid,
VOID ppvObj
);函数可以用来载入JPG的图片
用GDI+最好
糖糖寳寳
推荐于2016-06-10 · TA获得超过6.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:92%
帮助的人:4197万
展开全部
函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。
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条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式