WinCE中用IImage如何旋转JPG图片
2010-11-17 09:40
274 查看
要包括头文件
#include <INITGUID.h>
#include <imaging.h>
//JPG图片旋转功能
void CImagingDemoDlg::OnBnClickedRotate()
{
// TODO: 在此添加控件通知处理程序代码
HRESULT hr ; //返回结果
IImagingFactory * pImagingFactory =NULL; //Image工厂接口对象
IImage * pImage = NULL,* pNewImage = NULL; //Image接口对象;新的IImage图像
IBitmapImage * pbmpImg = NULL,* pNewbmpImg = NULL; //GIF/PNG/JPG图像;旋转后的图像
IBasicBitmapOps * pbmpOp = NULL; //旋转操作
ImageInfo imageInfo;
FLOAT m_RAngle = 90;
LPCTSTR szFileName = L"//Saturn&Jupiter.gif"; //图象文件notice.png//Windows Embedded.jpg//test.jpg
//初始化COM环境
if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
{
TRACE(L"COINIT_MULTITHREADED ERROR");
return;
}
//得到Image工厂接口对象
hr = CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void**) &pImagingFactory);
if (FAILED(hr))
{
TRACE(L"IMAGE FACTORY CREATED ERROR");
goto finish;
}
//加载图象文件到IImage接口对象中
hr = pImagingFactory->CreateImageFromFile(szFileName,&pImage);
if (FAILED(hr))
{
TRACE(L"IMAGE LOAD ERROR");
goto finish;
}
//获得原图片的基本信息
pImage-> GetImageInfo(&imageInfo);
//加载图像文件到IImage接口对象中
pImagingFactory->CreateBitmapFromImage(pImage,imageInfo.Width,imageInfo.Height,imageInfo.PixelFormat,InterpolationHintDefault,&pbmpImg);
//查询某个组件是否支持某个特定的接口,若支持则QueryInterface则返回一个指向特定接口的指针;若不支持则返回一个错误代码
hr = pbmpImg->QueryInterface(IID_IBasicBitmapOps,(void **)&pbmpOp);
//顺时针旋转
pbmpOp->Rotate(m_RAngle,InterpolationHintDefault,&pNewbmpImg);
//IBitmapImage对象->IImage对象
hr = pNewbmpImg->QueryInterface(IID_IImage,(void **)&pNewImage);
//开始绘制图象
//得到设备环境
CDC *pDC =GetDC();
//定义绘制尺寸
RECT rect;
GetClientRect(&rect);
//绘制图片
//pImage->Draw(pDC->m_hDC, &rect, NULL);
pNewImage->Draw(pDC->m_hDC, &rect, NULL);
//释放设备环境
ReleaseDC(pDC);
finish:
//释放IImage接口对象
if (pImage)
pImage->Release();
//释放IImagingFactory接口对象
if (pImagingFactory)
pImagingFactory->Release();
//释放程序占用的COM资源
CoUninitialize();
}
#include <INITGUID.h>
#include <imaging.h>
//JPG图片旋转功能
void CImagingDemoDlg::OnBnClickedRotate()
{
// TODO: 在此添加控件通知处理程序代码
HRESULT hr ; //返回结果
IImagingFactory * pImagingFactory =NULL; //Image工厂接口对象
IImage * pImage = NULL,* pNewImage = NULL; //Image接口对象;新的IImage图像
IBitmapImage * pbmpImg = NULL,* pNewbmpImg = NULL; //GIF/PNG/JPG图像;旋转后的图像
IBasicBitmapOps * pbmpOp = NULL; //旋转操作
ImageInfo imageInfo;
FLOAT m_RAngle = 90;
LPCTSTR szFileName = L"//Saturn&Jupiter.gif"; //图象文件notice.png//Windows Embedded.jpg//test.jpg
//初始化COM环境
if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
{
TRACE(L"COINIT_MULTITHREADED ERROR");
return;
}
//得到Image工厂接口对象
hr = CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void**) &pImagingFactory);
if (FAILED(hr))
{
TRACE(L"IMAGE FACTORY CREATED ERROR");
goto finish;
}
//加载图象文件到IImage接口对象中
hr = pImagingFactory->CreateImageFromFile(szFileName,&pImage);
if (FAILED(hr))
{
TRACE(L"IMAGE LOAD ERROR");
goto finish;
}
//获得原图片的基本信息
pImage-> GetImageInfo(&imageInfo);
//加载图像文件到IImage接口对象中
pImagingFactory->CreateBitmapFromImage(pImage,imageInfo.Width,imageInfo.Height,imageInfo.PixelFormat,InterpolationHintDefault,&pbmpImg);
//查询某个组件是否支持某个特定的接口,若支持则QueryInterface则返回一个指向特定接口的指针;若不支持则返回一个错误代码
hr = pbmpImg->QueryInterface(IID_IBasicBitmapOps,(void **)&pbmpOp);
//顺时针旋转
pbmpOp->Rotate(m_RAngle,InterpolationHintDefault,&pNewbmpImg);
//IBitmapImage对象->IImage对象
hr = pNewbmpImg->QueryInterface(IID_IImage,(void **)&pNewImage);
//开始绘制图象
//得到设备环境
CDC *pDC =GetDC();
//定义绘制尺寸
RECT rect;
GetClientRect(&rect);
//绘制图片
//pImage->Draw(pDC->m_hDC, &rect, NULL);
pNewImage->Draw(pDC->m_hDC, &rect, NULL);
//释放设备环境
ReleaseDC(pDC);
finish:
//释放IImage接口对象
if (pImage)
pImage->Release();
//释放IImagingFactory接口对象
if (pImagingFactory)
pImagingFactory->Release();
//释放程序占用的COM资源
CoUninitialize();
}
相关文章推荐
- java读取jpg图片旋转按比例缩放
- GDI+ 旋转图片(jpg,bmg,GDI+支持的图像格式)
- 如何在Symbian里面读取png,gif,jpg图片
- WinCE驱动开发 - 如何旋转wince的桌面
- WINCE 如何显示PNG和GIF图片
- WINCE 如何显示PNG和GIF图片
- 如何用jsp输出存在于oracle数据库Blob字段中的jpg图片
- WINCE 加载JPG 旋转缩放
- 请教,wince 关机图片如何修改?
- 如何在数据中能加载.JPG格式的图片
- Android中如何使用rotate实现图片不停旋转的效果与动画的停止
- WinCE如何使用PictureBox的Image属性通过图片路径显示图片
- [原创]如何实现图片明明是gif或者jpg的,可另存为的时候却变成“无标题”的BMP文件呢?
- Ruby如何旋转图片和获取图片的Retate值?
- WINCE 如何显示PNG和GIF图片
- 如何在 Windows Mobile (WinCE 5.0) 中用Vc++编程查找并连接周围的蓝牙(Bluetooth)设备并实现数据通信
- ArcGis for Android中如何获取自定义图层中的图片并旋转
- 如何将jpg转换成pdf格式的图片
- php如何将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串!
- Flex中如何利用Matrix类的rotate函数对图片进行旋转操作的例子