终于可以解压jpeg的格式了.
在网上找了一堆方法,现在来总结一下,用的第三方库libjpeg.
首先要装载库文件libjpeg,我已经用dev-cpp的make制好了一个.a的库文件, 和.lib一样的用.还有几个头文件都需要.
然后就是调函数,(照抄网上的):
//插入头文件
//网上说这是C写的库,如果调用不了库函数,在编译器选项中选择好库文件就行了
extern "C"
{
#include "jpeglib.h"
}
/**************************************************
读取jpeg
**************************************************/
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd,&ps);
/span>HDC ui_hdc_jpg=CreateCompatibleDC(hdc);//创建一个兼容的画架
//1、声明并初始化解压缩对象,同时制定错误信息管理器
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
//打开图像文件
FILE *f = fopen("pic2.jpg","rb");
jpeg_stdio_src(&cinfo, f);
//在wm_paint消息下使用画布
//读取信息头
jpeg_read_header(&cinfo, TRUE);
short jpgwidth=cinfo.image_width;
short jpgheight=cinfo.image_height;
short jpg_components=cinfo.num_components;
//创建一个位图句柄,以便在上面画点
HBITMAP himage3=(HBITMAP)LoadImage(hinstance,"pic1.bmp",IMAGE_BITMAP,jpgwidth,jpgheight,LR_LOADFROMFILE);
//根据信息头设定缓冲区的大小
BYTE* data = new BYTE [jpgwidth*jpgheight*jpg_components];
//开始解压缩
jpeg_start_decompress(&cinfo);
//开始读取压缩信息
JSAMPROW row_pointer[1];
while (cinfo.output_scanline < jpgheight)
{
unsigned int index=(jpgheight-cinfo.output_scanline-1)*jpgwidth*jpg_components;
//unsigned int index=(cinfo.output_scanline)*jpgwidth*jpg_components;
row_pointer[0]=&data[index];
jpeg_read_scanlines(&cinfo,row_pointer ,1);
}
jpeg_finish_decompress(&cinfo);
//释放资源 ,关闭文件
jpeg_destroy_decompress(&cinfo);
fclose(f);
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
SelectObject(ui_hdc_jpg,himage3);
//一个一个地往画架上画点
for(int row=0;row<jpgheight;row++)
{
for(int col=0;col<jpgwidth;col++)
{
long rowcol_translate=row*(jpgwidth*jpg_components)+col*jpg_components;
unsigned char r=data[rowcol_translate];
unsigned char g=data[rowcol_translate+1];
unsigned char b=data[rowcol_translate+2];
COLORREF rgb=RGB(r,g,b);
//先出来的是最底下的像素 ,所有要从下往上画点才行
SetPixel(ui_hdc_jpg,col,jpgheight-row-1,rgb);
}
}
//贴在画布上
BitBlt(hdc,0,0,jpgwidth,jpgheight,ui_hdc_jpg,0,0,SRCCOPY);
//释放资源
DeleteDC(ui_hdc_jpg);
EndPaint(hwnd,&ps);
分享到:
相关推荐
通过调用相应的函数,可以方便地将图像数据压缩为JPEG格式,或者从JPEG文件中解压出原始的图像数据。 总之,“Jpeg.rar”提供的工具简化了对JPEG格式的处理,使得开发者无需深入了解其复杂的压缩机制,就能高效地...
使用这些Matlab脚本,用户可以深入了解JPEG2000的压缩原理,对比不同压缩参数对图像质量和文件大小的影响,或者将其应用于自己的研究项目中。通过实验,我们可以发现JPEG2000在保持图像质量的同时,能够达到更高的...
解压JPEG图像则与压缩过程相反,主要包括以下步骤: 1. **读取字节流**:首先解析JPEG字节流,提取出图像的元数据和熵编码的系数。 2. **熵解码**:使用哈弗曼解码恢复原始量化系数。 3. **反量化**:将解码后的...
"JPEG_JPEG2000 压缩解压源码"的标签中提到了"key"和"注册机",这可能意味着这个压缩包包含了用于编译和运行JPEG与JPEG 2000压缩解压程序的源代码。源代码是编程的基础,可以让开发者了解算法的内部工作原理,甚至对...
在MATLAB环境下,我们可以利用其强大的数学计算能力和丰富的函数库来实现JPEG2000的压缩和解压过程。 MATLAB是一种交互式编程环境,特别适合进行数值计算和数据可视化。在JPEG2000的实现中,MATLAB代码通常会涉及...
MATLAB作为一个强大的数学计算环境,提供了实现JPEG压缩和解压的工具和函数。下面我们将详细探讨标题和描述中提到的几个关键概念。 1. DCT2(离散余弦变换2) DCT2,即二维离散余弦变换,是JPEG压缩中的核心步骤。...
在Symbian平台上,开发者可以使用EPOC R3及更高版本提供的GDI库来处理图像,包括JPEG解压。GDI提供了许多与图形相关的函数,包括加载、显示和操作位图。对于JPEG解压,我们需要调用特定的API,如`CEikonEnv::...
总结,"jpeg.rar_jpeg解压"的压缩包可能包含关于如何解压和理解JPEG文件格式的教程或代码示例。通过学习这些内容,开发者可以深入理解JPEG压缩算法,从而在图像处理项目中更有效地应用和优化JPEG格式。
在"121_JPEG压缩编码系统源代码"中,很可能包含了实现这些步骤的C/C++代码,可以作为学习和理解JPEG压缩原理的实践资源。通过阅读和分析这些源代码,你可以深入理解JPEG压缩算法的具体实现,包括数据结构、函数调用...
JPEG 2000利用这一特性,实现了更高效的压缩,同时支持渐进式解码,即用户可以先看到低质量版本的图像,随着数据的接收,图像质量逐渐提高。 **JPEG文件格式**: JPEG文件格式包含了一个编码头,用于指示图像的压缩...
**JPEG格式详解** JPEG(Joint Photographic Experts Group)是一种广泛使用的...通过研究这个压缩包,你可以深入了解JPEG压缩原理,并且能够实际操作JPEG解压的过程,这对于理解和开发图像处理相关的软件非常有帮助。
这个库提供了API接口,可以方便地进行JPEG操作。 1. **压缩**:在C++中,使用libjpeg库的`jpeg_compress_struct`结构体初始化压缩参数,如质量等级、颜色空间等。然后调用`jpeg_start_compress`开始压缩,`jpeg_...
低频部分优先编码,可以快速重建基本图像,而高频部分则用于增强图像细节,这样的级联结构使得JPEG2000支持渐进式解码。 4. **ROI编码**: 可以设置感兴趣区域(ROI, Region of Interest),对图像的重要部分进行更...
下面将详细介绍标题和描述中提及的MATLAB代码以及与JPEG压缩和解压相关的知识点。 1. **JPEG压缩原理**: JPEG压缩采用离散余弦变换(DCT)和量化技术,将图像数据转换为频域表示,然后通过丢弃高频部分来减少数据...
5. **图像解压缩**:MATLAB的`imread()`函数可以读取并解压JPEG图像。例如: ```matlab decompressed_img = imread('compressed.jpg'); ``` 6. **自定义JPEG实现**:虽然MATLAB提供了便捷的接口,但如果你想深入...
标题中的“jpeg.rar_jpeg解压_visual c”表明这是一个关于JPEG图像格式的压缩包,其中包含用Visual C++编写的源代码,用于实现JPEG的解压缩功能。JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像...
标签“jpeg图像解压”,“color_jpeg_matlab”,“dct”,“dct_jpeg_compression”和“jpeg”都指向了JPEG编码的核心元素。 JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像压缩标准,尤其适合...
JPEG2000是一种先进的数字图像压缩标准,相较于传统的JPEG标准,它提供了更高效的数据压缩比,更快的解压速度,以及对图像的无损压缩和局部访问能力。本资料包是基于MATLAB实现的JPEG2000图像压缩与解压的代码,非常...
在C/C++环境中,我们可以创建内存缓冲区来存储原始图像数据、压缩后的JPEG数据以及解压缩后的图像数据。 3. **使用Jpeglib8c库** `Jpeglib8c`是JPEG编解码库的一个版本,它支持在内存中处理JPEG数据。首先,我们...