怎么通过ITRANSFORM_TransformBltComplex实现一个IImage图片的局部缩放

pjy717 2010-01-28 02:01:58
IImage *pImage = NULL;
AEEImageInfo imageinfo;
ITransform *po = NULL;
AEETransformMatrix tm;
IBitmap *pIBitmap = NULL;
IBitmap *pIBitmapSrc = NULL;

pImage = ISHELL_LoadResImage(pMe->a.m_pIShell, "game.bar", IDI_FRAMEA);


IImage_GetInfo(pImage, &imageinfo);

//建立一个跟屏幕兼容的并且跟图片等打ibitmap接口pIBitmap
IBITMAP_CreateCompatibleBitmap(IDisplay_GetDestination(pMe->a.m_pIDisplay), &pIBitmap, imageinfo.cx, imageinof.cy);

IDisplay_SetDestination(pMe->a.m_pIDisplay, pIBitmap);
//把图片画到pIBitmap上
IImage_Draw(pImage, 0, 0);
//恢复显示目标bitmap
IDisplay_SetDestination(pMe->a.m_pIDisplay, NULL);

//创建一个跟pIBitmap兼容的并且大小为40X40的pIBitmapSrc
IBITMAP_CreateCompatibleBitmap(pIBitmap, &pIBitmapSrc, 40, 40);
//获取pIBitmapSrc的Transform接口
IBITMAP_QueryInterface(pIBitmapSrc, AEECLSID_TRANSFORM,(void**)&po);
tm.A = tm.B = tm.C = tm.D =0;// 256;
tm.A = 256*2;//放大2倍
tm.D = 256*2;
//从pIBitmap的10,10开始,区域大小为20,20通过放大画到pIBitmapSrc中
ITRANSFORM_TransformBltComplex(po, 0, 0, pIBitmap, 10, 10, 20, 20, &tm, COMPOSITE_OPAQUE);
//把pIBitmapSrc画到屏幕上
IBitmap_BltIn( IDisplay_GetDestination(pMe->a.m_pIDisplay), 100, 100, 40, 40, pIBitmapSrc, 0, 0, AEE_RO_COPY);
IDisplay_Update(pMe->a.m_pIDisplay);

这段代码中我打算实现从把pImage的图片中从(10, 10)开始,到宽高20,20的矩形区域放大到40,40大小的图片,
实际图片的大小48,32的宽高
这里我没有做一下接口生成的判断(略去,主要看逻辑),但现实出来的效果是发生了放大,在屏幕显示的是40,40,但是这个40X40的区域中只有从0,0到20,20是图片,没有占满40X40的区域,其他是黑色,
请教各位,ITRANSFORM_TransformBltComplex在这里使用的错吗?是什么原因?
注:我当前使用的版本是brew3.15

...全文
1847 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsf81 2010-01-28
  • 打赏
  • 举报
回复
IBitmap* pDisplayBmp = NULL;
IBitmap* pibSrc = NULL;
AEETransformMatrix t;
ITransform* psITransform = NULL;


// 获取显示器位图
IDISPLAY_GetDeviceBitmap(pApp->a.m_pIDisplay, &pDisplayBmp);

// 创建背景位图
IBITMAP_CreateCompatibleBitmap(pDisplayBmp, &pibSrc, DISP_SCREEN_WIDTH, DISP_SCREEN_HEIGHT);

IBITMAP_QueryInterface(pibSrc, AEECLSID_TRANSFORM, (void **)&psITransform );

t.A = (256*TABVIEW_DX)/DISP_SCREEN_WIDTH;
t.B = 0;
t.C = 0;
t.D = (256*TABVIEW_DY)/DISP_SCREEN_HEIGHT;
ITRANSFORM_TransformBltComplex(psITransform, (TABVIEW_DX-DISP_SCREEN_WIDTH)/2, (TABVIEW_DY-DISP_SCREEN_HEIGHT)/2, pDisplayBmp,0,0,DISP_SCREEN_WIDTH,DISP_SCREEN_HEIGHT,&t,COMPOSITE_KEYCOLOR);

if(pApp->m_Tab[pApp->m_CurPageID].fBitmap)
{
IBITMAP_Release(pApp->m_Tab[pApp->m_CurPageID].fBitmap);
pApp->m_Tab[pApp->m_CurPageID].fBitmap = NULL;
}
IBITMAP_CreateCompatibleBitmap(pDisplayBmp, &pApp->m_Tab[pApp->m_CurPageID].fBitmap, TABVIEW_DX, TABVIEW_DY);

IBitmap_BltIn(pApp->m_Tab[pApp->m_CurPageID].fBitmap, 0, 0,
DISP_SCREEN_WIDTH, DISP_SCREEN_HEIGHT,pibSrc, 0, 0, AEE_RO_COPY);

if(pibSrc)
{
IBITMAP_Release(pibSrc);
pibSrc = NULL;
}

if(pDisplayBmp)
{
IBITMAP_Release(pDisplayBmp);
pDisplayBmp = NULL;
}
if(psITransform)
{
ITRANSFORM_Release(psITransform);
psITransform = NULL;
}

2,851

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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