`
westice
  • 浏览: 115549 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

可以解压jpeg啦!

阅读更多

终于可以解压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);
 
分享到:
评论
1 楼 javafound 2010-03-28  

相关推荐

    Jpeg.rar_jpeg压缩_jpeg压缩和解压_jpeg解压_解压jpeg

    通过调用相应的函数,可以方便地将图像数据压缩为JPEG格式,或者从JPEG文件中解压出原始的图像数据。 总之,“Jpeg.rar”提供的工具简化了对JPEG格式的处理,使得开发者无需深入了解其复杂的压缩机制,就能高效地...

    jpeg2000.rar_JPEG2000解压_image compression_jpeg2k matlab_图像压缩_图像压

    使用这些Matlab脚本,用户可以深入了解JPEG2000的压缩原理,对比不同压缩参数对图像质量和文件大小的影响,或者将其应用于自己的研究项目中。通过实验,我们可以发现JPEG2000在保持图像质量的同时,能够达到更高的...

    compress.zip_JPEG C语言_jpeg压缩与解压_jpeg压缩解压

    解压JPEG图像则与压缩过程相反,主要包括以下步骤: 1. **读取字节流**:首先解析JPEG字节流,提取出图像的元数据和熵编码的系数。 2. **熵解码**:使用哈弗曼解码恢复原始量化系数。 3. **反量化**:将解码后的...

    JPEG_JPEG2000 压缩解压源码

    "JPEG_JPEG2000 压缩解压源码"的标签中提到了"key"和"注册机",这可能意味着这个压缩包包含了用于编译和运行JPEG与JPEG 2000压缩解压程序的源代码。源代码是编程的基础,可以让开发者了解算法的内部工作原理,甚至对...

    JPEG2000压缩、解压MATLAB代码

    在MATLAB环境下,我们可以利用其强大的数学计算能力和丰富的函数库来实现JPEG2000的压缩和解压过程。 MATLAB是一种交互式编程环境,特别适合进行数值计算和数据可视化。在JPEG2000的实现中,MATLAB代码通常会涉及...

    JPEG图像压缩和解压MATLAB程序

    MATLAB作为一个强大的数学计算环境,提供了实现JPEG压缩和解压的工具和函数。下面我们将详细探讨标题和描述中提到的几个关键概念。 1. DCT2(离散余弦变换2) DCT2,即二维离散余弦变换,是JPEG压缩中的核心步骤。...

    JPEG.rar_jpeg解压_symbian_symbian jpeg

    在Symbian平台上,开发者可以使用EPOC R3及更高版本提供的GDI库来处理图像,包括JPEG解压。GDI提供了许多与图形相关的函数,包括加载、显示和操作位图。对于JPEG解压,我们需要调用特定的API,如`CEikonEnv::...

    jpeg.rar_jpeg解压

    总结,"jpeg.rar_jpeg解压"的压缩包可能包含关于如何解压和理解JPEG文件格式的教程或代码示例。通过学习这些内容,开发者可以深入理解JPEG压缩算法,从而在图像处理项目中更有效地应用和优化JPEG格式。

    JPEG压缩编码系统源代码.rar_jpeg_jpeg 压缩_jpeg压缩编码_jpeg鍘嬬缉_压缩编码

    在"121_JPEG压缩编码系统源代码"中,很可能包含了实现这些步骤的C/C++代码,可以作为学习和理解JPEG压缩原理的实践资源。通过阅读和分析这些源代码,你可以深入理解JPEG压缩算法的具体实现,包括数据结构、函数调用...

    图像压缩解压JPEG编码

    JPEG 2000利用这一特性,实现了更高效的压缩,同时支持渐进式解码,即用户可以先看到低质量版本的图像,随着数据的接收,图像质量逐渐提高。 **JPEG文件格式**: JPEG文件格式包含了一个编码头,用于指示图像的压缩...

    JPEG.rar_jpeg解压

    **JPEG格式详解** JPEG(Joint Photographic Experts Group)是一种广泛使用的...通过研究这个压缩包,你可以深入了解JPEG压缩原理,并且能够实际操作JPEG解压的过程,这对于理解和开发图像处理相关的软件非常有帮助。

    jpeg.rar_JPEG Decompression_JPEG压缩 c++_jpeg_jpeg压缩_jpeg解压

    这个库提供了API接口,可以方便地进行JPEG操作。 1. **压缩**:在C++中,使用libjpeg库的`jpeg_compress_struct`结构体初始化压缩参数,如质量等级、颜色空间等。然后调用`jpeg_start_compress`开始压缩,`jpeg_...

    JPEG2000压缩算法C++实现

    低频部分优先编码,可以快速重建基本图像,而高频部分则用于增强图像细节,这样的级联结构使得JPEG2000支持渐进式解码。 4. **ROI编码**: 可以设置感兴趣区域(ROI, Region of Interest),对图像的重要部分进行更...

    JPEG 压缩和解压 matlab 代码

    下面将详细介绍标题和描述中提及的MATLAB代码以及与JPEG压缩和解压相关的知识点。 1. **JPEG压缩原理**: JPEG压缩采用离散余弦变换(DCT)和量化技术,将图像数据转换为频域表示,然后通过丢弃高频部分来减少数据...

    基于Matlab的JPEG图像压缩编解码的设计与实现_jpeg压缩matlab_JPEG压缩MATLAB实现_jpeg_jpeg

    5. **图像解压缩**:MATLAB的`imread()`函数可以读取并解压JPEG图像。例如: ```matlab decompressed_img = imread('compressed.jpg'); ``` 6. **自定义JPEG实现**:虽然MATLAB提供了便捷的接口,但如果你想深入...

    jpeg.rar_jpeg解压_visual c

    标题中的“jpeg.rar_jpeg解压_visual c”表明这是一个关于JPEG图像格式的压缩包,其中包含用Visual C++编写的源代码,用于实现JPEG的解压缩功能。JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像...

    Color-Image-JPEG-Compression.rar_JPEG图像解压_color JPEG matlab_dct_

    标签“jpeg图像解压”,“color_jpeg_matlab”,“dct”,“dct_jpeg_compression”和“jpeg”都指向了JPEG编码的核心元素。 JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像压缩标准,尤其适合...

    jpeg2000_MATLAB.zip

    JPEG2000是一种先进的数字图像压缩标准,相较于传统的JPEG标准,它提供了更高效的数据压缩比,更快的解压速度,以及对图像的无损压缩和局部访问能力。本资料包是基于MATLAB实现的JPEG2000图像压缩与解压的代码,非常...

    JPEG内存中压缩解压缩

    在C/C++环境中,我们可以创建内存缓冲区来存储原始图像数据、压缩后的JPEG数据以及解压缩后的图像数据。 3. **使用Jpeglib8c库** `Jpeglib8c`是JPEG编解码库的一个版本,它支持在内存中处理JPEG数据。首先,我们...

Global site tag (gtag.js) - Google Analytics