读取图像DPI信息的方法

今天有个项目需要获取图像DPI信息,搜了几篇博客的描述,最终采用GDI+的方法实现,总结实现方法如下:

0.编程平台:VS2015,语言:C++

1.下载GDI+包,初始化GDI+环境

(1)在工程的App类中增加声明信息,主要包括头文件包含,拷贝库文件gdiplus.lib到工程目录,拷贝动态库文件gdiplus.dll到工程输出文件(一般release或debug目录)。或者在工程中编译器属性中响应的设置库文件和运行文件路径。

#include "GdiPlus.h"
#pragma comment(lib,"gdiplus.lib")
#define ULONG_PTR ULONG

//using namespace Gdiplus;//引用命名空间,我的工程中由于还使用OpenCV,引用命名空间会造成Rect等类型不确定的问题,因此不引用,后续响应的注明GDI+相关函数的命名前缀。

(2)在App类的定义中增加变量定义如下

ULONG_PTR m_gdiplus;//为调用GDI+定义的变量

(3)然后在App类的InitInstance()函数中增加变量的初始化
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    Gdiplus::GdiplusStartup(&m_gdiplus, &gdiplusStartupInput, NULL);

(4)在App类的ExitInstance()函数中增加变量释放

Gdiplus::GdiplusShutdown(m_gdiplus);

2.读取DPI数据的实现

CFileDialog dlg(TRUE, _T("bmp"), NULL, OFN_FILEMUSTEXIST | OFN_EXPLORER, _T("图像文件(*.bmp;*.jpg;*.png)|*.bmp;*.jpg;*.png|图元文件(*.dxf)|*.dxf|"));

    if (dlg.DoModal() == IDOK)
    {
        CString strFilePath = "";
        strFilePath = dlg.GetPathName();
        CString strExtName = strFilePath.Right(3);
        if (strExtName == "bmp" || strExtName == "jpg" || strExtName == "png")
        {
            Gdiplus::Status status = Gdiplus::GenericError;//定义GDI+的状态信息变量,在调试过程查看是否出错
            Gdiplus::Image imgtemp(strFilePath);
            status = imgtemp.GetLastStatus();
            if (status != Gdiplus::Ok) AddDebugInfo("GDI加载图像失败!");//status= =Gdiplus::Ok说明最近一次GDI+操作是成功的
            
            Gdiplus::REAL x_reso=imgtemp.GetHorizontalResolution();//读取水平方向DPI信息
            if (status != Gdiplus::Ok) AddDebugInfo("GDI读取水平分辨率失败!");
            Gdiplus::REAL y_reso = imgtemp.GetVerticalResolution();//读取垂直方向DPI信息,通常两个值是一样的。可以只执行一个操作就好了,返回值数据类型是Gdiplus::REAL,其实就是float型的
            if (status != Gdiplus::Ok) AddDebugInfo("GDI读取垂直分辨率失败!");
            //CString str = "";
            //str.Format(_T("该图像DPI为%4.2f×%4.2f"), x_reso, y_reso);
            //AddDebugInfo(str);//这是自定义的用于显示调试信息的函数,可以无视

         }

……

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值