VC6.0 平台 JPEG 图片读写实验
实验 VC6.0 平台 JPEG 图片读写
- 实验目的
(1)编译 JPEG-8C 参考软件。
(2)学会使用 JPEG-8C 提供的可执行文件进行简单的 JPEG 解压缩。
(3)在 Microsoft Visual C++ 6.0 环境下进行读写 JPEG 格式文件实验,了解并熟悉基本
的 JPEG 文件解压缩和压缩处理方式。 - 实验环境
(1)Windows XP OS
(2)IJG 参考软件 JPEG-8C
(3)Microsoft Visual C++ 6.0 - 实验程序
(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 格式文件实验。进一步加强了对于不同环境与方式的图片读写。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
