社区
游戏开发
帖子详情
请问哪里有JPEG图象压缩算法的C源码?
arlisto
2001-11-22 10:22:59
...全文
1619
44
打赏
收藏
请问哪里有JPEG图象压缩算法的C源码?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
44 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
supersusheng
2002-07-19
打赏
举报
回复
插入书签
atm2001
2002-07-18
打赏
举报
回复
在VC中编程显示一幅位图,下列步骤是不可缺少的: 装入位图、获得位图的大小信息、启用设备环境、位传输等,所需的程序代码一般比较冗长而且复杂。如果想将装入的位图另存为其他格式的图像文件,代码就更长了。这一切都是因为GDI本身的局限性造成的。
GDI+技术
随着Windows 2000的推出,上述情况有了极大的改观: 程序员不必了解每种图像格式的具体含义,照样可以写出多格式图像浏览或转换程序,这一切全都依赖于Windows 2000及后继版中所使用的GDI+技术。
和传统的GDI不同,GDI+中引入了对COM(组件对象模型)技术的支持,通过COM技术,GDI+简化了对图像文件的访问(打开、保存)。它是通过调用COM组件来实现的,GDI+扮演的只是指挥者,而非操作员。对于图像文件,GDI+所关心的不是图像文件的文件头信息,不论要打开的文件格式是什么类型,GDI+首先要做的是在注册表中查看该图像格式的编码(或解码)信息是否已经注册(HKEY_CLASSES_ROOT\MIME\Database\Content Type)。如果已经注册,就通过该编码信息调用COM组件,就这么简单。这种技术早就在微软的其他软件中使用了(如IE)。“体验”过Nimda病毒的朋友可能对“audio/wav”这段代码并不陌生,Nimda就是靠它来伪装自己的:让IE认为附件是WAV文件而自动打开可执行程序,这其实也是IE使用COM技术的一个突出表现。
配合GDI+的推出,微软也同时发布了相应的SDK,如果已经安装了最新的Microsoft PlatForm SDK或已经开始使用VS.NET,GDI+的SDK就已经在系统中了。如果没有的话,可以到http: //noner.top263.net/progtool上去下载GDI+的头文件和库文件。有了GDI+之后,只需简单地创建一个图形对象(Graphics object),然后直接调用该对象的方法(methods)进行绘图即可。图形对象是GDI+中的核心,正如DC之于GDI那样。图形对象和DC有许多相似的地方,在使用上遵循着相同的使用规则,但是两者在本质上已经有很大的区别。一个是基于句柄的GDI,一个是基于组件对象模型的GDI+。使用GDI+的SDK编程,必须按照下面的规范来进行:使用GDI+的命名空间(namespace Gdiplus),在使用GDI+函数时必须进行GDI+的初始化,使用完毕要销毁GDI+,这些规范在下面所列的程序中有详细的说明。
访问注册表编码信息
上面说到GDI+是通过在注册表中查看编码信息来访问图像文件的,在GDI+的SDK中,编码信息是存储在 ImageCodecInfo类中的,在这个类中,有编码的CLSID(COM组件的GUID标识码)、编码方式描述等。对于GDI,在注册表中访问编码信息通常使用以下两个函数来实现:
1. 查看系统中可用的图像编码信息(数量及大小)
Status GetImageEncodersSize(
UINT* numEncoders,
//存储编码器数量的地址
UINT* size //存储编码信息所需内存大小
);
2. 得到所有的编码信息
Status GetImageEncoders(
UINT numEncoders,//可用编码器数量
UINT size,//存储编码器信息所需内存(由ImageCodecInfo类组成的数组的大小)
ImageCodecInfo* encoders//编码器信息指针
);
在GetImageEncoders函数中,参数numEncoders和size都是由GetImageEncodersSize返回的。下面的代码在注册表中查找具体格式图像的编码方式:
int GetImageCLSID(const WCHAR* format, CLSID* pCLSID)
{ //得到格式为format的图像文件的编码值,访问该格式图像的COM组件的GUID值保存在pCLSID中
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return FALSE; // 编码信息不可用
//分配内存
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return FALSE; // 分配失败
//获得系统中可用的编码方式的所有信息
GetImageEncoders(num, size, pImageCodecInfo);
//在可用编码信息中查找format格式是否被支持
for(UINT i = 0; i < num; ++i)
{ //MimeType:编码方式的具体描述
if( wcscmp(pImageCodecInfo[i]
.MimeType, format) == 0 )
{
*pCLSID = pImageCodecInfo[i]
.Clsid;
free(pImageCodecInfo);
return TRUE;
}
}
free(pImageCodecInfo);
return FALSE;
}
实现多格式的图像浏览和转换
有了前面的知识,实现多格式的图像的浏览与转换就不是什么难事了。
1.在VC中创建一个SDI项目ImageShow,对GDI+声明和初始化及销毁进行代码编制,具体代码如下:
#include “Gdiplus.h”
using namespace Gdiplus;
CImageShowView::CImageShowView()
{
//初始化GDI+
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
}
CImageShowView::~CImageShowView()
{
//销毁GDI+
ULONG_PTR gdiplusToken;
GdiplusShutdown(gdiplusToken);
}
2. 通过类向导(Class Wizard),重载“文件”菜单中的“打开”和“另存为”两项。为了编程的简单,本程序只将当前打开的图像文件直接存为BMP文件(实际上保存为其他格式的文件也很简单,只不过是对文件名进行分析而已)。另外,为了在打开和保存文件时进行文件名的传递,还应在CImageShowView类中加入一全局变量“CString strOpenFileName”。“打开”和“另存为”两菜单的对应代码如下:
WCHAR* ToWChar(char * str)
{
//在GDI+中,有关字符的参数类型全部都是WCHAR类型
//该函数是将传统字符串进行转换
static WCHAR buffer[1024];
wcsset(buffer,0);
MultiByteToWideChar(CP_ACP,0,str,strlen(str),buffer,1024);
return buffer;
}
void CImageShowView::OnFileOpen()
{
//本程序能够打开各类常见格式的图像文件 static char szFilter[]=“常见格式图像文件(*.*)|*.*|”;
CFileDialog dlgChoseImage(1,NULL,NULL,NULL,szFilter);
if(dlgChoseImage.DoModal()==IDOK)
{
strOpenFileName=dlgChoseImage
.GetPathName();
//打开文件后立即在窗口中显示(重绘客户窗口)
this->Invalidate();
}
}
void CImageShowView::OnFileSaveAs()
{
if(strOpenFileName.IsEmpty())
{
AfxMessageBox(“当前没有打开图像文件,不能进行保存!”);
return;
}
//建立图形对象
Graphics graphics(GetDC()->m_hDC);
//装入当前已经打开的图像文件
Image image(ToWChar(strOpenFileName.GetBuffer(strOpenFileName.GetLength())));
CString strFileSave;
//将其他格式的图像全部另存为BMP文件
static char szFilter[]=“位图(*.BMP)|*.BMP|”;
CFileDialog dlgChoseImage(0,“BMP”,NULL,NULL,szFilter);
if(dlgChoseImage.DoModal()==IDOK)
{
strFileSave=dlgChoseImage.GetPathName();
CLSID clsid;
if(GetImageCLSID(L“image/bmp”,&clsid))
{
image.Save(ToWChar(strFileSave.GetBuffer(strFileSave.GetLength())), &clsid, NULL);
//将保存后的图像进行显示
strOpenFileName=strFileSave;
this->Invalidate();
}
}
}
3.为了浏览图像转换前后的效果,还应该在窗口中分别绘制转换前后的图像,这需要在OnDraw函数中添加绘制代码,如下所示:
void CImageShowView::OnDraw(CDC* pDC)
{
CImageShowDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//如果没有选择显示图像文件,则不用重绘
if(strOpenFileName.IsEmpty())
return;
//显示当前打开的图像文件的全名
this->GetParent()->SetWindowText(strOpenFileName);
//建立图像对象
Graphics graphics(pDC->m_hDC);
//装入图形文件
Image image(ToWChar(strOpenFileName.GetBuffer(strOpenFileName.GetLength())));
Point destPoints[3] =
{
Point(0, 0),
Point(image.GetWidth(), 0),
Point(0, image.GetHeight())
};
Point* pdestPoints = destPoints;
//在指定区域pdestPoints显示图像
graphics.DrawImage(&image, pdestPoints, 3);
}
在编译上面的程序之前,应该将Gdiplus.lib文件连编到项目中去,否则将会出现“LINK 2001”编译错误。上述程序在Visual Studio 6.0、Windows 2000/XP下调试通过,它能够显示或转换的图像格式有BMP、GIF、JPEG、Exif、PNG、TIFF、ICON、WMF、EMF等等。
星光依旧灿烂
2002-02-20
打赏
举报
回复
能否给我jpeg的c++原代码,谢谢
xing_star@sina.com
dluangel
2002-01-28
打赏
举报
回复
to:SaintNiya(来自远方)
可以给我一份吗?多谢!
lindamini@21cn.com
dluangel
2002-01-28
打赏
举报
回复
楼上的,我也要一份,多谢了!急盼,马上要交差了!
lindamini@21cn.com
SuYang1999
2002-01-27
打赏
举报
回复
楼上的,我也要一分
FENGER9991@SINA.COM
FaZeng
2002-01-26
打赏
举报
回复
樓上的兄弟, 可否也給小弟來一份....先謝了
FaZeng@ms8.url.com.tw
xuweixxxx
2002-01-24
打赏
举报
回复
hate_cry(孤鸿):
JPEG2000的源码给我一份,谢谢!
麻烦你给我一些关于图象格式以及处理的相关资料,我的毕业设计要用!
谢谢你了!
我的e_mail flyxu1980@263.net
sungirlzhx
2002-01-24
打赏
举报
回复
楼上的,大家都是好朋友,jpg的原码请给我一份。
annie1231@263x.com或sungirlzhx@sohu.com
雷欧海特
2002-01-23
打赏
举报
回复
我已经把J2K源码放在网上了,你们可以到
http://go7.163.com/andylee/c++prog/src.zip下载!!!
jixixiaofeng
2002-01-23
打赏
举报
回复
234
wqyuwss
2002-01-23
打赏
举报
回复
ququshb(忘求了),可是Intel jpeg Library做不了jpeg2000
ringphone(临风) ,校园网不是可以用代理的么?
SaintNiya(来自远方) ,你知道那个人的联系方法么?
SaintNiya
2002-01-23
打赏
举报
回复
jpeg主页上有他的email
ququshb
2002-01-22
打赏
举报
回复
同意楼上,使用Intel jpeg Library..方便实用。
ringphone
2002-01-21
打赏
举报
回复
wangqiqi(Venom):
你提供的那个站点在国外,我是教育网,上不去,能给我发一份吗?
ringphone@sina.com
wzpx2001
2002-01-20
打赏
举报
回复
能不能给俺发一个,本人正在研究
wzpx@263.net
sphinxly
2002-01-18
打赏
举报
回复
谢谢,我也要一份吧
email sphinxly@sohu.com
SaintNiya
2002-01-18
打赏
举报
回复
jpeg2k看不懂得说,现在工作了琐事天天作不完.没有时间再去看wavelet之类的东东给自己充电.
(在政府机关工作就是好,看看报纸喝喝茶,看到老爷大人磕磕头,做事一点都不用动脑子,爽啊)
图形学的东东只是大学时的个人爱好罢了.我学的也不是计算机.
还有一点,jpeg2k目前还仅仅只是一个标准,工程应用中的东西名堂还多着呢.国内现在好像
有很多人在搞应用,现在连后缀名都没有统一的说.听说t大就有几个教研室在搞.
另外,jpeg在p大有一个联络人,想要标准或想加入jpeg,找他看看.
一大梨
2002-01-17
打赏
举报
回复
楼上的兄弟,也给我一分吧,我很感兴趣。
honlin2000@21cn.com
wuy
2002-01-17
打赏
举报
回复
hate_cry(孤鸿):
JPEG2000的源码给我一份,谢谢!
ywugy@sina.com
加载更多回复(24)
JPEG
概述和头分析(C
源码
)
本文深入介绍了
JPEG
压缩标准的三大类型:标准
JPEG
、渐进式
JPEG
和
JPEG
2000,并详细解析了
JPEG
的压缩原理、
压缩算法
及文件结构。特别针对
JPEG
文件头部信息进行了
源码
级分析。
图形图像基础 之 gif介绍
本文深入介绍了GIF文件格式,包括文件头、数据流、文件尾部等组成部分,以及GIF的
压缩算法
、与其它格式的比较。此外,详细阐述了libgif库的使用,提供了
源码
下载、编译安装步骤,以及解码GIF到RGB数据的示例代码,展示了如何将GIF文件内容逐帧解码并保存为RGB数据。
论文复现基于超局部模型无模型预测电流控制(MFPCC)+自抗扰ESO观测器改进模型预测控制仿真(Simulink仿真实现)
内容概要:本文档聚焦于“基于超局部模型的无模型预测电流控制(MFPCC)结合自抗扰ESO观测器改进模型预测控制”的Simulink仿真研究,属于电力电子与电机控制领域的高阶科研复现项目。研究采用无模型预测控制策略,引入超局部模型以简化系统建模过程,避免对精确数学模型的依赖,并融合自抗扰控制中的扩张状态观测器(ESO),实现对系统内部动态与外部干扰的实时估计与补偿,从而显著提升电流环控制的动态响应速度、稳态精度及系统鲁棒性。文档不仅详述了该复合控制策略的设计原理与仿真实现,还配套提供了完整的Matlab/Simulink代码与模型,并列举了涵盖模型预测控制、滑模控制、PI/FCS-MPC对比、永磁同步电机控制、四旋翼轨迹跟踪、电池均衡、微电网能量管理等方向的丰富科研仿真资源,服务于学术研究与工程实践。; 适合人群:具备自动控制理论、电机控制原理、电力电子技术及Matlab/Simulink仿真基础的研究生、高校科研人员,以及从事高性能电机驱动、新能源发电、电力变换系统开发的工程师。; 使用场景及目标:① 复现并深入理解MFPCC与ESO相结合的先进控制算法在电机电流控制中的集成应用;② 对比分析无模型预测控制与传统依赖精确模型的控制方法(如FCS-MPC)在抗干扰能力和模型误差容忍度方面的性能差异;③ 掌握ESO在扰动观测与前馈补偿中的关键技术,探究其对系统鲁棒性的提升机制;④ 作为毕业设计、高水平学术论文复现、科研项目预研或工业级控制器开发的理论与实践参考。; 阅读建议:建议读者结合所提供的Simulink仿真模型与代码进行动手实践,重点剖析控制器架构设计、ESO参数整定方法、代价函数构建及仿真结果的动态响应与抗扰性能对比分析,同时可参考文档中列出的相关课题资源,横向拓展对现代先进控制理论体系的认知。
图纸打开报错?优先补充字体资源.rar
做 CAD 的伙伴看过来!打开图纸文字乱码、全是问号?整理了多款实用处理方法,多数情况都能有效解决,有需要可以下载试试~
YOLO算法室内生产区域人员未穿围裙目标检测数据集-154张-标注类别为未穿围裙.zip
【注:该页面底部资源详情处,可查看数据集可视化效果】 1. YOLO目标检测数据集, 适用于YOLOV5、yolov7,yolov8, yolov11, yolov13, yolo26等系列算法,含标签,已标注好,可以直接用来训练; 2. 内置data.yaml数据集配置文件,已经划分好了训练集、验证集等; 3. 数据集和模型具体情况可参考 https://blog.csdn.net/zhiqingAI/article/details/124230743?spm=1001.2014.3001.5502
游戏开发
8,324
社区成员
23,685
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章