FreeImage例子

2023-10-28

http://www.pudn.com/downloads525/sourcecode/windows/detail2176862.html

#include "OpenJPEG.h"
#include "unistd.h"
OpenJPEG::OpenJPEG(void)
{
}
OpenJPEG::~OpenJPEG(void)
{
}
FIBITMAP* OpenJPEG::Openjpg()
{
    char *strPath="lena.jpg";
    m_pFibitmap = LoadDIB(strPath, 0);
    return m_pFibitmap;
}
//通用图像加载函数,支持的图像有bmp,jpg,tif,png,gif,psd,pgm等等
FIBITMAP* OpenJPEG::LoadDIB(char* lpszPathName, int flag)
{
    m_lpszPathName = lpszPathName;
    m_fif = FreeImage_GetFileType(lpszPathName);                           //获取Image类型
    //如果没有文件签名,试着从文件扩展名判断文件类型
    if(m_fif == FIF_UNKNOWN)
        m_fif = FreeImage_GetFIFFromFilename(lpszPathName);
    //检查插件是否具有读取该格式的能力
    if((m_fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(m_fif))
    {
        FIBITMAP *dib = FreeImage_Load(m_fif, lpszPathName, flag);
        return dib;
//        FITAG *tagMake = NULL;
//        FreeImage_GetMetadata(FIMD_EXIF_EXIF,dib,"Make",&tagMake);
//        if (tagMake!=NULL)
//        {
//            //SetDlgItemText(IDC_EDIT1,tagMake);
//        }
    }
    return NULL;
}
bool OpenJPEG::Savejpg(FIBITMAP *dib,char* lpszPath, int flag)
{
    FREE_IMAGE_FORMAT fif =FIF_UNKNOWN;
    //
    BOOL bSuccess = FALSE;
    //
    fif=FreeImage_GetFIFFromFilename(lpszPath);
    //判断能否进行保存
    if(fif != FIF_UNKNOWN )
    {
        BOOL bCanSave;
        FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib);
        if(image_type == FIT_BITMAP)
        {
            WORD bpp = FreeImage_GetBPP(dib);
            bCanSave=(FreeImage_FIFSupportsWriting(fif) && FreeImage_FIFSupportsExportBPP(fif, bpp));
        }
        else
        {
            bCanSave=FreeImage_FIFSupportsExportType(fif, image_type);
        }
        if (bCanSave)
        {
            bSuccess = true;
        }
        FIBITMAP* bitmap = FreeImage_ConvertFromRawBits(dib->data,width,height,pitch,24,FI_RGBA_BLUE_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_RED_MASK,FALSE);
        FreeImage_Save(fif,bitmap,lpszPath,flag);
    }
    return true;
}
int OpenJPEG::RescalePic(const char *srcPicPath,int rscWidth,int rscHeight,const char *rscPicPath)
{
    if(access(srcPicPath,0) != 0)
        return 499;             //no such file ,or access deny
    if(rscWidth<=0 || rscHeight<=0)
        return 423;             //you input a wrong size, the rscWidth/rscHeight must be bigger than zero
    FIBITMAP *sourcePic = NULL,*rescalePic = NULL,*finalPic = NULL;
    FreeImage_Initialise();
    FREE_IMAGE_FORMAT picType = FIF_UNKNOWN;
    picType = FreeImage_GetFileType (srcPicPath,0);
    if(picType == FIF_UNKNOWN)
    {
//              picType = FreeImage_GetFIFFromFilename(srcPicPath);
//              if(picType == FIF_UNKNOWN)
//              {
            FreeImage_DeInitialise();
            return 421; //can not get picture type
//              }
    }
    bool typeSupport = FreeImage_FIFSupportsReading(picType);
    if(typeSupport == FALSE)
    {
        FreeImage_DeInitialise();
        return 422;             //not support image type
    }
    sourcePic = FreeImage_Load(picType,srcPicPath,NULL);
    if(!sourcePic)
    {
        FreeImage_DeInitialise();
        return 499;
    }
    double originalWidth,originalHeight;
    unsigned int finalWidth,finalHeight;
    originalWidth  = FreeImage_GetWidth(sourcePic);
    originalHeight = FreeImage_GetHeight(sourcePic);
    if(originalWidth*originalHeight == 0)
    {
        FreeImage_Unload(sourcePic);
        sourcePic = NULL;
        FreeImage_DeInitialise();
        return 425;
    }
//      finalWidth  = rscWidth;
//      finalHeight = rscHeight;
    if(originalWidth<=rscWidth && originalHeight<=rscHeight)
    {
        finalWidth = originalWidth;
        finalHeight = originalHeight;
    }
    else
    {
        if (rscWidth * (originalHeight / originalWidth) > rscHeight)
        {
            finalWidth = rscHeight * (originalWidth / originalHeight);
            finalHeight = rscHeight;
        }
        else
        {
            finalWidth = rscWidth;
            finalHeight = rscWidth * (originalHeight / originalWidth);
        }
    }
//      rsc = FreeImage_ConvertToType(src,FIT_BITMAP,true);
    rescalePic = FreeImage_Rescale(sourcePic,finalWidth,finalHeight,FILTER_BOX);//rescale size: 165x130
    if(!rescalePic)
    {
        FreeImage_Unload(sourcePic);
        sourcePic = NULL;
        FreeImage_DeInitialise();
        return 499;//
    }
    finalPic = FreeImage_ConvertTo24Bits(rescalePic); //this is important,if no this,the rescaled gif cannot flash
    if(!finalPic)
    {
        FreeImage_Unload(sourcePic);
        FreeImage_Unload(rescalePic);
        sourcePic = NULL;
        rescalePic = NULL;
        FreeImage_DeInitialise();
        return 499;//
    }
    int returnValue = 0;
    if(!FreeImage_Save(FIF_JPEG,finalPic,rscPicPath,JPEG_DEFAULT))      //save rescaled picture
        returnValue = 499;
    FreeImage_Unload(sourcePic);
    FreeImage_Unload(rescalePic);
    FreeImage_Unload(finalPic);
    sourcePic = NULL;
    rescalePic = NULL;
    finalPic = NULL;
    FreeImage_DeInitialise();
    return returnValue;
}
IplImage* OpenJPEG::loadipl(const char* filename)
{
    FreeImage_Initialise();
    FIBITMAP* dib = GenericLoader(filename);
    if(!dib)
        return NULL;
    int nClrUsed = FreeImage_GetColorsUsed(dib);
    int nBpp = FreeImage_GetBPP(dib);
    int height = FreeImage_GetHeight(dib);
    int width = FreeImage_GetWidth(dib);
    RGBQUAD* pPalette = FreeImage_GetPalette(dib);
    int nChannel=3;
    if(!nClrUsed && !pPalette)      //无调色板图像处理
    {
        IplImage* iplImg = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,nChannel);
        iplImg->origin = 1;
        for(int y=0;y<height;y++)
        {
            BYTE* pLine = (BYTE*)iplImg->imageData + y*iplImg->widthStep;
            BYTE* psrcLine = (BYTE*)FreeImage_GetScanLine(dib,y);
            for (int x=0;x<nChannel*width;x++)
            {
                *pLine++ = *psrcLine++;
            }
        }
        FreeImage_Unload(dib);
        FreeImage_DeInitialise();
        return iplImg;
    }
    else if(pPalette)//索引图像处理
    {
        IplImage* iplImg = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,nChannel);
        iplImg->origin = 1;
        BYTE intensity;
        BYTE* pIntensity = &intensity;
        for(int y=0;y<height;y++)
        {
            BYTE* pLine = (BYTE*)iplImg->imageData + y*iplImg->widthStep;
            for (int x=0;x<width;x++)
            {
                FreeImage_GetPixelIndex(dib,x,y,pIntensity);
                pLine[x*3] = pPalette[intensity].rgbBlue;
                pLine[x*3+1] = pPalette[intensity].rgbGreen;
                pLine[x*3+2] = pPalette[intensity].rgbRed;
            }
        }
        FreeImage_Unload(dib);
        FreeImage_DeInitialise();
        return iplImg;
    }
    else
    {
        FreeImage_Unload(dib);
        FreeImage_DeInitialise();
        return NULL;
    }
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeImage例子 的相关文章

  • 学生信息管理系统(c语言版)

    大一下C语言要交课程设计 于是就写了一个学生信息管理系统 仅供参考 学生信息包括姓名 学号 性别 年龄和各科成绩 可根据需要自行修改添加 包括增 删 改查 查看所有 保存 清空7个功能 每个功能都封装成一个函数 保存功能是将所添加的信息保存
  • 使用 js 实现 队列

    队列是一种特殊的列表 队列只能在队尾插入元素 在队首删除元素 队列用于存储按顺序排列的数据 先进先出 参数 接收的参数为数组类型 属性及方法 栈的抽象数据类型定义 列表 属性或方法 描述 enqueue 方法 向队尾加入一个元素 deque
  • 【计算机网络】计网知识点

    T1 互联网两大组成部分的特点是什么 它们的工作方式各有什么特点 因特网两大组成部分 边缘部分 核心部分 1 特点 边缘部分 由各主机构成 核心部分 由各路由器连网组成 2 工作方式特点 边缘部分 用户直接进行信息处理和信息共享 低速连入核
  • 使用 MATLAB 进行气象激光雷达图像分析(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 在经济高速发展的当下 环境保护是人类不可避
  • SpringCloud 中pom文件的解析

    本文仅为笔者笔记 欢迎指正 探讨
  • ClassNotFoundException: com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator

    测试类启动访问数据库报错 详细报错信息如下 java lang IllegalStateException Failed to load ApplicationContext at org springframework test cont
  • RedLock加锁源码分析

    目录 Redis获取锁 加锁操作 lockInterruptibly unLock Redis获取锁 首先了解下Redisson 获取RLock RedissionLock public RLock getLock String name
  • 《高质量程序设计指南--C/C++语言》学习笔记

    高质量程序设计指南 C C 语言 学习笔记 高质量软件开发之道 程序设计入门 内部名称 连接规范 变量及其初始化 浮点变量与零值比较 C C常量 正确定义符号常量 类中的常量 实际应用中如何定义常量 在C程序中定义多个编译单元或模块公用的常
  • whl文件安装方法

    whl格式本质上是一个压缩包 里面包含了py文件 以及经过编译的pyd文件 使得可以在不具备编译环境的情况下 选择合适自己的python环境进行安装 问题描述 whl下载了后不会安装 解决方法 1 把下载的文件拖到桌面 2 进入cmd命令行
  • Qt教程一

    文章目录 Qt是什么 Qt 可以做什么 Qt 的辛酸史 Qt 和 KDE GPL 和 LGPL 如何选择开源协议 2 为什么用Qt Qt 和 MFC 3 Qt Creator 安装之后添加组件 编码问题 主界面 创建项目 项目文件 main

随机推荐

  • 记常用Ubuntu命令

    Ubuntu 服务器 sudo i 切换到root用户 sudo lsof i 8080 查看8080端口是否被占用以及pid sudo kill 9 pid 通过pid关闭指定服务进程 docker ps 查看docker镜像相关信息 d
  • python统计excel某一列不同类别数量

    功能 某一列 比如病例类型 数据含有多种类别 比如 死亡 存活 失访 三种类别 取值 用python实现统计出这三种类别的数量 输入 xlsx文件 含有病例类型这一列row 4 数据含有 死亡 存活 失访 三种类别取值 输出 三种类别的数量
  • 二叉树链式存储结构代码实现

    上一篇博客已经介绍过实际内容了 这一篇直接上干货代码了 结构体 前面写的是用c语言写的 用的也是递归的方法 typedef char BTDataType typedef struct BTNode struct BTNode left s
  • 给数组元素指定位置排序方法

    调整数组选项 梨子 香蕉 苹果 selectSort gt let finalData const arr name 苹果 code apple name 梨子 code pear name 香蕉 code banana 原数据 const
  • office全家桶_大学新生必备!Adobe+Office全家桶免费拿。

    做最有趣有料的科技自媒体 数一数手指 还有几天就要开学了 各 位准大学生们听我 说 作为曾经的 学长 我很有必要告诉你们一些来自大学的 潜规则 你迟早有一天会用到电脑里装的Adode和offic的软件 Adobe和 office 的软件可以
  • Android 自定义属性,自定义控件、自定义View以及View的常见Error

    Android 自定义属性 自定义控件 自定义View以及View的常见Error View GONE 不占据layout 但是对象还是存在 资源还是占用的 View INVISIBLE 占据layout 对象还是存在 资源还是占用的 只是
  • Java开发代码规范之异常日志(二)——日志规约

    文章通过学习 阿里巴巴Java开发手册 整理 1 应用中不可直接使用日志系统 Log4j Logback 中的API 而应依赖使用日志框架SLF4J中的API 使用门面模式的日志框架 有利于维护和各个类的日志处理方式统一 import or
  • 【华为OD机试】不开心的小朋友(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 游乐场里增加了一批摇摇车 非常受小朋友欢迎 但是每辆摇摇车同时只能有一个小朋友使用 如果没有
  • 信号与系统——初识到理解(第五章——傅立叶变换的应用)

    目录 第五章 傅立叶变换的应用 信号与系统的时频域特性 5 1 傅立叶变换的模和相位表示 5 2 无失真传输系统 讨论连续情况 离散时足以整数约束即可 5 3 系统相位 5 4 群时延 采样 5 5 通信中对信号的加工 5 6 冲击串采样
  • SM2可以使用私钥加密吗

    是的 SM2可以使用私钥加密 SM2是一种非对称加密算法 它使用公钥和私钥对数据进行加密和解密 私钥是保存在本地的密钥 只有拥有私钥的人才能使用它来加密数据或对已加密的数据进行解密 SM2的私钥加密功能可以用来保护数据的安全性 防止数据在传
  • 文件上传漏洞

    文件上传 文件上传是现代互联网常见的功能 允许用户上传图片 视频 及其他类型文件 向用户提供的功能越多 Web受攻击的风险就越大 文件上传漏洞 上传文件时 如果未对上传的文件进行严格的验证和过滤 就容易造成文件上传漏洞 上传脚本文件 包括a
  • 大数据学习01 -Linux 的简单使用

    1 NAT 网络地址转换 默认使用VMnet8 1 原理 子网掩码 和IP进行与操作 可以得到对应的子网IP 在那个网段上 IP 哪台机制 网关 路由器的IP dns 去dbs服务器查找域名对应的IP 常用命令 修改主机名 vi etc s
  • 13.罗马数字转整数

    这题转成字符数组后遍历就是了 罗马数字包含以下七种字符 I V X L C D 和 M 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 罗马数字 2 写做 II 即为两个并列的 1 12 写做 X
  • 2023华为OD机试 报数游戏(Python)

    题目 输入 输入一个整数 n 代表有多少人 n 小于 1000 输出 告诉我最后剩下的那个人原来是第几个 示例 输入 2 输出 2 解释 两人围成一圈 第一个人数到3就走了 所以最后剩的是第二个人 理解 想象这样一个游戏 大家围成一圈 从第
  • C++:sort函数

    sort函数用于C 中 对给定区间所有元素进行排序 默认为升序 也可进行降序排序 sort函数进行排序的时间复杂度为n log2n 比冒泡之类的排序算法效率要高 使用sort函数要包含头文件为 include
  • Nginx实现四层代理与七层代理

    目录 一 实验环境准备 1 准备三台服务器 2 安装nginx环境 3 启动nginx环境 二 设置Nginx七层代理 1 proxy代理服务器配置 轮询 2 设置加权轮询 3 健康检测功能 4 解决重复登录问题 源地址哈希ip hash
  • 透视投影

    11
  • Idea使用Maven编译scala和打包jar

    下面Maven的pom文件
  • DBhelper的使用

    建立一个DbHelper cs类文件 复制内容 using System using System Data using System Data SqlClient using System Configuration using Syst
  • FreeImage例子

    http www pudn com downloads525 sourcecode windows detail2176862 html include OpenJPEG h include unistd h OpenJPEG OpenJP