VC6.0 平台 JPEG 图片读写实验

实验 VC6.0 平台 JPEG 图片读写

  1. 实验目的
    (1)编译 JPEG-8C 参考软件。
    (2)学会使用 JPEG-8C 提供的可执行文件进行简单的 JPEG 解压缩。
    (3)在 Microsoft Visual C++ 6.0 环境下进行读写 JPEG 格式文件实验,了解并熟悉基本
    的 JPEG 文件解压缩和压缩处理方式。
  2. 实验环境
    (1)Windows XP OS
    (2)IJG 参考软件 JPEG-8C
    (3)Microsoft Visual C++ 6.0
  3. 实验程序
    (1)JPEG 图像的解压缩操作
int read_JPEG_file (char * filename) 
{                      //定义解压缩过程中使用的 JPEG 结构体对象 cinfo struct jpeg_decompress_struct cinfo; //定义一个用于错误处理的结构体对象 jerr struct jpeg_error_mgr jerr; FILE * infile;   JSAMPLE * p;      int i;           JSAMPARRAY buffer; int row_stride;   if ((infile = fopen(filename, "rb")) == NULL) { fprintf(stderr, "can't open %s\n", filename); return 0; } cinfo.err = jpeg_std_error(&jerr); 
jpeg_create_decompress(&cinfo); 
jpeg_stdio_src(&cinfo, infile); (void) jpeg_read_header(&cinfo, TRUE); (void) jpeg_start_decompress(&cinfo); 
image_height = cinfo.output_height; 
image_width = cinfo.output_width; 
row_stride = cinfo.output_width * cinfo.output_components; 
buffer = (*cinfo.mem->alloc_sarray) 
((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); image_buffer = (JSAMPLE *) malloc(row_stride*cinfo.output_height); p=image_buffer;                           //记录 image_buffer 的首地址 
while (cinfo.output_scanline < cinfo.output_height) { (void) jpeg_read_scanlines(&cinfo, buffer, 1); for(i=0;i<row_stride;i++) {p[i]= buffer[0][i];} p += row_stride; } (void) jpeg_finish_decompress(&cinfo); 
jpeg_destroy_decompress(&cinfo); fclose(infile); return 1; 
}2)JPEG 图像的压缩操作
int write_JPEG_file (char * filename, int quality) 
{ 
struct jpeg_compress_struct cinfo; 
struct jpeg_error_mgr jerr; FILE * outfile;                      //目标文件 JSAMPROW row_pointer[1]; int row_stride; 
cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); 
if ((outfile = fopen(filename, "wb")) == NULL) { fprintf(stderr, "can't open %s\n", filename); return 0; }3) 应用上述函数进行解压缩操作
#include  
#include  
extern "C" 
{ 
#include "jpeglib.h" 
} 
JSAMPLE * image_buffer;//JSAMPLE==unsigned char 
int image_height; 
int image_width; 
int read_JPEG_file (char * filename) ;                  //声明读 JPG 文件函数 
int write_JPEG_file (char * filename, int quality) ;     //声明写 JPG 文件函数 
int main(int argc, char *argv[]) 
{    int flag; int Q; if (argc != 3)  { printf("Command Error!\n"); return -1; } printf("Hello,this is a JPEG code and decode program!\n"); printf("The input file's name is %s \n",argv[1]); printf("The output file's name is %s \n",argv[2]); flag = read_JPEG_file (argv[1]); if(flag==0) {   printf("向内存中读入 jpg 文件失败!\n"); return -1; } printf("向内存中读入 jpg 文件成功!\n"); printf("输入图像压缩比 Q:"); scanf("%d",&Q); flag = write_JPEG_file (argv[2], Q); if(flag==0) 
{   printf("向磁盘中写入 jpg 文件失败!\n"); return -1; } printf("向磁盘中写入 jpg 文件成功!\n"); free(image_buffer); return 0; 
}

4,实验结果
在这里插入图片描述在这里插入图片描述

5,实验总结
通过这次实验,简单的了解并应用了JPEG-8C 参考软件,并且利用这个软件成功完成了实验。学会使用 JPEG-8C 提供的可执行文件进行简单的 JPEG 解压缩,在 Microsoft Visual C++ 6.0 环境下进行读写 JPEG 格式文件实验。进一步加强了对于不同环境与方式的图片读写。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部