5958|11

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE中用IImage如何旋转gif图片 [复制链接]

方法是用IBasicBitmapOps 进行旋转,代码大概是:

IImagingFactory* pImgFactory = NULL;
IImage* pImage = NULL;

IBitmapImage* pbmpImg = NULL; //bmp图像
IBitmapImage* pNewbmpImg=NULL; //旋转后的bmp图像
IBasicBitmapOps *pbmpOp = NULL; //旋转操作
IImage* pNewImage=NULL; //新的iimage图像

(1)CoCreateInstance (CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void**)&pImgFactory))

(2)pImgFactory->CreateImageFromFile(picfPath, &pImage)) && SUCCEEDED(pImage->GetImageInfo(&imageInfo))

(3)pImgFactory->CreateBitmapFromImage(pImage,scrnW,scrnH,imageInfo.PixelFormat,InterpolationHintDefault,&pbmpImg)

(4)pbmpImg->QueryInterface(IID_IBasicBitmapOps,(void **) &pbmpOp);
pbmpOp->Rotate(m_RAngle,InterpolationHintDefault,&pNewbmpImg);
pNewbmpImg->QueryInterface(IID_IImage,(void **)&pNewImage));

(5)pNewImage->Draw(pDC->GetSafeHdc(), &rc, NULL);

对于JPG, PNG, TIF 都能实现, 可是 BMP,GIF文件到了第(3)步却创建不成功~~~请问如何用IImage实现GIF文件的旋转啊?
     

最新回复

WinCE中用IImage如何旋转JPG图片 http://topic.eeworld.net/u/20091118/15/97b5a6d0-f9aa-456d-b26e-f91286df8a97.html?seed=1545030343&r=61272118#r_61272118 这个是个关于“BMP/GIF/PNG/JPG图像的旋转功能”的实现, 你说你的BMP和GIF图片不能选装,是不是所用的图片太大了?  详情 回复 发表于 2009-11-19 10:16
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
大哥,由实验验证过么?
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
创建不成功返回什么错呀?
你的IMAGE里面关于BMP和GIF的组件加了么?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
我现在按照以下代码做,该代码没有添加“图片旋转功能”那三行时是可以加载一幅jpb图片到用户区(VC++2005,WinMobile 6.0中文模拟器环境):

  1. void CImagingDemoDlg::OnBnClickedRotate()
  2. {
  3.         // TODO: 在此添加控件通知处理程序代码
  4.         HRESULT hr ; //返回结果
  5.         IImagingFactory * pImagingFactory =NULL; //Image工厂接口对象
  6.         IImage * pImage = NULL;        //Image接口对象

  7.         IBitmapImage * pbmpImg = NULL;   //bmp图像
  8.         IBitmapImage * pNewbmpImg = NULL;   //旋转后的bmp图像
  9.         IBasicBitmapOps * pbmpOp = NULL;   //旋转操作
  10.         IImage * pNewImage = NULL;   //新的IImage图像
  11.         FLOAT m_RAngle = 90;

  12.         LPCTSTR szFileName = L"\\Windows Embedded.jpg"; //图象文件test.jpg

  13.         //初始化COM环境
  14.     if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
  15.     {
  16.                TRACE(L"COINIT_MULTITHREADED ERROR");
  17.                 return;
  18.     }

  19.         //得到Image工厂接口对象
  20.      hr = CoCreateInstance(CLSID_ImagingFactory,
  21.                           NULL,
  22.                           CLSCTX_INPROC_SERVER,
  23.                           IID_IImagingFactory,
  24.                           (void**) &pImagingFactory);

  25.     if (FAILED(hr))
  26.         {
  27.                 TRACE(L"IMAGE FACTORY CREATED ERROR");
  28.                 goto finish;
  29.         }

  30.         //加载图象文件到IImage接口对象中
  31.         hr = pImagingFactory->CreateImageFromFile(szFileName,&pImage);

  32.         //
  33.         if (FAILED(hr))
  34.         {
  35.                 TRACE(L"IMAGE LOAD ERROR");
  36.                 goto finish;
  37.         }       
  38.         //图片旋转功能--------------------------------------------------------
  39.         hr = pImage->QueryInterface(IID_IBasicBitmapOps,(void **)&pbmpOp);
  40.         pbmpOp->Rotate(m_RAngle,InterpolationHintDefault,&pNewbmpImg);
  41.         pNewbmpImg->QueryInterface(IID_IImage,(void **)&pNewImage);

  42.         //-----------------------------------------------------------------
  43.         //开始绘制图象
  44.         //得到设备环境
  45.         CDC *pDC =GetDC();

  46.         //定义绘制尺寸
  47.         RECT rect;
  48.         GetClientRect(&rect);

  49.         //绘制图片
  50.         pImage->Draw(pDC->m_hDC, &rect, NULL);

  51.         //释放设备环境
  52.         ReleaseDC(pDC);

  53. finish:
  54.         //释放IImage接口对象
  55.     if (pImage)
  56.         pImage->Release();
  57.         
  58.         //释放IImagingFactory接口对象
  59.     if (pImagingFactory)
  60.         pImagingFactory->Release();

  61.         //释放程序占用的COM资源
  62.     CoUninitialize();

  63. }

复制代码


在hr = pImage->QueryInterface(IID_IBasicBitmapOps,(void **)&pbmpOp);
执行后返回hr=E_NOINTERFACE,对照资料说是“不支持接口”,
那是不是说俺使用的模拟器环境不支持“IID_IBasicBitmapOps”接口?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
在VS2005的帮助文件中,查询IID_IBasicBitmapOps条目,出来的结果是只有Microsoft Windows CE 5.0的,是不是在Mobile6.0中不支持或是没有添加呢?
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 
直接调他们的接口函数就可以的
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 xqhrs232 的回复:
直接调他们的接口函数就可以的


怎么个"直接调用"啊?

 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
关注!
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

9
 

  1. (2)pImgFactory-> CreateImageFromFile(picfPath,   &pImage))   &&   SUCCEEDED(pImage-> GetImageInfo(&imageInfo))
复制代码


这个语句中的SUCCEEDED(pImage-> GetImageInfo(&imageInfo)) ,这个好像不能这样写吧,
应该单独出来为一句:


  1. pImage-> GetImageInfo(&imageInfo);
复制代码
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
关注
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

11
 
WinCE中用IImage如何旋转JPG图片
http://topic.eeworld.net/u/20091118/15/97b5a6d0-f9aa-456d-b26e-f91286df8a97.html?seed=1545030343&r=61272118#r_61272118

这个是个关于“GIF/PNG/JPG图像的旋转功能”的实现,

至于“可是BMP,GIF文件到了第(3)步却创建不成功~~~请问如何用IImage实现GIF文件的旋转啊?”这个问题,俺觉得流程应该不是你原来说的这样了...
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
WinCE中用IImage如何旋转JPG图片
http://topic.eeworld.net/u/20091118/15/97b5a6d0-f9aa-456d-b26e-f91286df8a97.html?seed=1545030343&r=61272118#r_61272118

这个是个关于“BMP/GIF/PNG/JPG图像的旋转功能”的实现, 你说你的BMP和GIF图片不能选装,是不是所用的图片太大了?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表