【视频开发】非常优秀的CxImage各种格式图像开源工具
下面介绍应用它进行图像类型转换的方式:
1.从一种图像文件类型转换为另一种文件类型(convert from a format to another)
 CxImage   image;    // 定义一个CxImage对象
 // 从bmp文件转换为jpg文件(bmp -> jpg) 
 image.Load( " image.bmp " , CXIMAGE_FORMAT_BMP);    // 先装载bmp文件,需要指定文件类型
     // 判断加载的bmp文件是否存在。 
 if (image.IsValid())... {
        // Returns true if the image has 256 colors   and a linear grey scale palette. 
      if ( ! image.IsGrayScale())image.IncreaseBpp( 24 ); // param nbit: 4, 8, 24
      image.SetJpegQuality( 99 );                 // 设置图像的压缩质量参数(从0到100,数值越大,质量越高) 
      image.Save( " image.jpg " ,CXIMAGE_FORMAT_JPG);           // 把压缩后的图像以jpg文件类型保存起来。 
 } 

 // 从png文件转换为tif文件(png -> tif) 
 image.Load( " image.png " , CXIMAGE_FORMAT_PNG);
 if (image.IsValid()) {
     image.Save( " image.tif " ,CXIMAGE_FORMAT_TIF);
}2。加载程序资源图像(load an image resource)
即从程序的资源图像中构建CxImage对象,有如下几种方式:
 // Load the resource IDR_PNG1 from the PNG resource type 
 CxImage * newImage = new CxImage();
newImage -> LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
                        " PNG " ),CXIMAGE_FORMAT_PNG);或者
 // Load the resource IDR_JPG1 from DLL 
 CxImage * newImage = new CxImage();
HINSTANCE hdll = LoadLibrary( " imagelib.dll " );
 if (hdll) {
     HRSRC hres = FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1), " JPG " );
     newImage -> LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
     FreeLibrary(hdll);
}或者
 // Load a bitmap resource; 
 HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(),
                               MAKEINTRESOURCE(IDB_BITMAP1)));
CxImage * newImage = new CxImage();
newImage -> CreateFromHBITMAP(bitmap);3。在内存缓冲中的图像类型转换
(1)把内存缓冲中的数据解码成一个Image对象(decode an image from memory)
有如下几种方式:
------
 CxImage image((BYTE * )buffer,size,image_type); // 把内存缓冲buffer中的数据构造成Image对象
 // 或: 
 
CxMemFile memfile((BYTE * )buffer,size); // 显式使用CxMemFile对象 
 CxImage image( & memfile,image_type);
 // 或: 
 
CxMemFile memfile((BYTE * )buffer,size);
CxImage * image = new CxImage();
image -> Decode( & memfile,type);
============
(2)把Image编码存放到内存缓冲中(encode an image in memory)
--------
 long size = 0 ; // 得到图像大小 
 BYTE * buffer = 0 ; // 存储图像数据的缓冲 
 image.Encode(buffer,size,image_type); // 把image对象中的图像以type类型数据copy到buffer 
 ...
free(buffer);
或:
CxMemFile memfile;             // 显式使用CxMemFile对象 
 memfile.Open();
image.Encode( & memfile,image_type);
BYTE * buffer = memfile.GetBuffer();
 long size = memfile.Size();
...
free(buffer);
4。处理系统粘贴板中的图像(copy/paste an image)
 // copy(到粘贴板) 
 HANDLE hDIB = image -> CopyToHandle();
 if (::OpenClipboard(AfxGetApp() -> m_pMainWnd -> GetSafeHwnd())) {
     if (::EmptyClipboard()) {
         if (::SetClipboardData(CF_DIB,hDIB) == NULL) {
             AfxMessageBox( " Unable to set Clipboard data " );
}      }      } 
CloseClipboard();
 // paste(从粘贴板粘贴出来) 
 HANDLE hBitmap = NULL;
CxImage * newima = new CxImage();
 if (OpenClipboard()) hBitmap = GetClipboardData(CF_DIB);
 if (hBitmap) newima -> CreateFromHANDLE(hBitmap);
CloseClipboard();
5。在picture box中显示一个png格式的文件
 HBITMAP m_bitmap = NULL;
CxImage image( " myfile.png " , CXIMAGE_FORMAT_PNG);
...
m_bitmap = image.MakeBitmap(m_picture.GetDC() -> m_hDC);
m_picture.SetBitmap(m_bitmap);
...
 if (m_bitmap) DeleteObject(m_bitmap);四。其它
一 个CxImage对象是一个扩展了的位图。作者只是在位图结构上添加了一些起存储信息作用的成员变量。一个CxImage对象(同时)也是一组层。每个层 只有在需要时才会分配相应的缓冲区。CxImage::pDib代表着背景图像,CxImage::pAlpha代表着透明层,CxImage:: pSelection代表着被选中的层,被用来创建图像处理时让用户感兴趣的区域。在这三个特殊层面的基础上,你可以增加一些额外的层,这些层可以存储在 CxImage::pLayers中。一般说来,层是一个完整的CxImage对象。因此,你可以构造很复杂的嵌套层。下面是CxImage的一些成员变
 量:
 class CxImage
 {
...
 protected :
 void * pDib;             // 包含文件头,调色板等等 
 BITMAPINFOHEADER head; // 标准的文件头(位图) 
 CXIMAGEINFO info;       // 扩展了的信息 
 BYTE * pSelection;       // 用户选中的区域 
 BYTE * pAlpha;           // alpha通道 
 CxImage ** pLayers;      // 通用层 
 } 
typedef struct tagCxImageInfo {
DWORD    dwEffWidth;        // DWORD 扫描线宽 
 BYTE *     pImage;            // 图像位数 
 void *     pGhost;            // ifthis is a ghost, pGhost point to the body
 DWORD    dwType;            // 原图像的格式 
 char      szLastError[ 256 ]; // 出错信息 
 long      nProgress;         // 监视循环的次数 
 long      nEscape;           // 跳出标志 
 long      nBkgndIndex;       // GIF, PNG, MNG格式使用 
 RGBQUAD nBkgndColor;       // RGB三原色透明度 
 BYTE     nQuality;          // JPEG格式使用 
 long      nFrame;            // TIF, GIF, MNG使用 :实际的帧数 
 long      nNumFrames;        // TIF, GIF, MNG使用 :帧总数 
 DWORD    dwFrameDelay;      // GIF, MNG使用 
 long      xDPI;              // 水平分辨率 
 long      yDPI;              // 垂直分辨率 
 RECT     rSelectionBox;     // 选中的矩形区 
 BYTE     nAlphaMax;         // 阴影的最大不透明度 
 bool      bAlphaPaletteEnabled;   // 如果调色板中有Alpha通道则为真 
 bool      bEnabled;          // 打开绘图函数 
 long      xOffset;
 long      yOffset;
DWORD    dwEncodeOption;    // 一些编码选项 
 RGBQUAD last_c;            // 一些优化选项 
 BYTE     last_c_index;
 bool      last_c_isvalid;
 long      nNumLayers;
DWORD    dwFlags;
} CXIMAGEINFO;
【视频开发】非常优秀的CxImage各种格式图像开源工具的更多相关文章
- Android 音视频开发(一):PCM 格式音频的播放与采集
		
什么是 PCM 格式 声音从模拟信号转化为数字信号的技术,经过采样.量化.编码三个过程将模拟信号数字化. 采样 顾名思义,对模拟信号采集样本,该过程是从时间上对信号进行数字化,例如每秒采集 44100 ...
 - NSA开发的工控ICS/SCADA态势感知开源工具Grassmarlin(附下载地址)
		
工具简介 GRASSMARLIN是一款由美国国家安全局开发的,能够帮助运维工程师在IP网络上发现并编目监控和数据采集系统(SCADA)和工业控制系统(ICS)主机的开源软件工具,也被称为被动网络映射器 ...
 - 【视频开发】opencv不能读取MP4格式文件
		
用OpenCV对视频进行处理时,不能打开.mp4格式的文件.后来解决办法是用ffmpeg.exe将mp4文件转码为avi文件,然后再进行处理.但是转码过程比较慢.后来查看opencv源代码,发现它也是 ...
 - 【视频开发】 十全大补:CxImage图像处理类库
		
十全大补:CxImage图像处理类库 转载IT168 CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保存,显示,转换各种常见格式的图像文件,比如BMP, JP ...
 - C#开发可播放摄像头及任意格式视频的播放器
		
前言 本文主要讲述,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能,下面我们先来做开发前的准备工作. 准备工作 首先,我们创建一个项目WpfVLC,然后,进入Neget搜索Vlc. ...
 - 基于VLC库C#开发可播放摄像头及任意格式视频的播放器
		
前言 本文主要讲述,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能,下面我们先来做开发前的准备工作. 准备工作 首先,我们创建一个项目WpfVLC,然后,进入Neget搜索Vlc. ...
 - 【视频开发】四大图像库:OpenCV/FreeImage/CImg/CxImage
		
1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...
 - 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换
		
在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...
 - Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
		
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
 
随机推荐
- CF888G 【Xor-MST】
			
妙妙题-- 看到\(MST\),想到\(Kruskal\),看到异或,想到\(Trie\) 首先我们模拟一下\(Kruskal\)的流程:找到最小边,如果联通就忽略,未联通就加边 我们把所有点权值加入 ...
 - 【luoguP1414]】又是毕业季II
			
题目链接 \(solution\) 暴力求每个数有多少个倍数,从大到小,数\(i\)的倍数有\(f_i\)个,那么选\(1\)~\(f_i\)个同学的答案可以为\(i\),取第一次更新的答案最大 #i ...
 - 【Codeforces】CF367D Sereja and Sets (数学)
			
题目大意 1到n这n个正整数被分成了m个不相交的集合(集合不一定连续),现在从这m个集合中选出最少个数的集合,满足对于[1,n]中任意一个长度为d的区间都至少有一个数字出现在已选集合中.(1 < ...
 - fluent meshing建立周期性网格
			
原视频下载地址:https://pan.baidu.com/s/1pKUXKgz 密码: 6pwh
 - edusoho上传视频弹出abort之解决方案
			
错误描述:edusoho上传如avi.mp4等容量大的图片(如100m以上或500m等)弹出abort提示框 原因:是因为web服务器apache默认上传文件有限制导致的 解决办法如下: (1)首先修 ...
 - CTF SQL注入
			
目录 一.宽字节注入 二.基于约束的注入 三.报错注入 四.时间盲注 五.bool盲注 六.order by的注入 六.INSERT.UPDATE.DELETE相关的注入 七.堆叠注入 八.常用绕过 ...
 - Alpha2
			
队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11885037.html 作业博客 :https://edu.cnblogs.com/campus/f ...
 - CentOS 7 安装 MySql8.0
			
1-配置 Yum 库 rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm 2-安装 MySql 2.1 ...
 - WAL streaming (max_wal_senders > 0) requires wal_level "replica" or "logical"
			
初次使用pg的11版本,执行以下操作修改归wal_level设置: alter system set set wal_level='minimal'; 尝试重启pg,发现重启失败,并报错: waiti ...
 - gmake: Nothing to be done for `all'.
			
安装gc_buffercache的时候报错: [root@~ pg_buffercache]# gmake gmake: Nothing to be done for `all'. 解决方法: > ...