⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fjpeg.cxx

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CXX
字号:
#include <Flek/math.H>#include <Flek/FFile.H>#include <Flek/FImage.H>#include <Flek/FJPEG.H>extern "C"{#include <jpeglib.h>}/* * Code to read JPEG images.  Boiler plate stuff snarfed from the  * libjpeg examples. */FImage *FJPEG::read(char *filename){    struct jpeg_decompress_struct cinfo;    struct jpeg_error_mgr jerr;    FILE *infile;    int row_stride;    if ((infile = fopen(filename, "rb")) == NULL) {	fprintf(stderr, "can't open %s\n", filename);	return 0;    }    // Step 1: allocate and initialize JPEG decompression object    cinfo.err = jpeg_std_error(&jerr);    jpeg_create_decompress(&cinfo);    // Step 2: specify data source (eg, a file)    jpeg_stdio_src(&cinfo, infile);    // Step 3: read file parameters with jpeg_read_header()    (void) jpeg_read_header(&cinfo, TRUE);    // Step 5: Start decompressor      (void) jpeg_start_decompress(&cinfo);    FImage *rval =	new FImage(cinfo.output_width, cinfo.output_height,		   cinfo.output_components);    row_stride = cinfo.output_width * cinfo.output_components;    while (cinfo.output_scanline < cinfo.output_height) {	unsigned char *i[1];	i[0] =	    *(rval->begin(cinfo.output_height - cinfo.output_scanline - 1));	(void) jpeg_read_scanlines(&cinfo, i, 1);    }    // Step 7: Finish decompression     (void) jpeg_finish_decompress(&cinfo);    // Step 8: Release JPEG decompression object and allocated memory    jpeg_destroy_decompress(&cinfo);    fclose(infile);    return rval;}intFJPEG::write(char *filename, FImage * data, int quality){    struct jpeg_compress_struct cinfo;    struct jpeg_error_mgr jerr;    if (data->channels() == 3)	cinfo.in_color_space = JCS_RGB;    else if (data->channels() == 1)	cinfo.in_color_space = JCS_GRAYSCALE;    else	return -1;    FILE *outfile;    int row_stride;    unsigned char *row_pointer[1];    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 -1;    }    jpeg_stdio_dest(&cinfo, outfile);    cinfo.image_width = data->width();    cinfo.image_height = data->height();    if (data->channels() == 3)	cinfo.in_color_space = JCS_RGB;    else if (data->channels() == 1)	cinfo.in_color_space = JCS_GRAYSCALE;    else	return -1;    cinfo.input_components = data->channels();    jpeg_set_defaults(&cinfo);    jpeg_set_quality(&cinfo, quality, TRUE);    jpeg_start_compress(&cinfo, TRUE);    row_stride = data->width() * data->channels();    while (cinfo.next_scanline < cinfo.image_height) {	row_pointer[0] =	    *(data->begin(cinfo.image_height - cinfo.next_scanline - 1));	(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);    }    jpeg_finish_compress(&cinfo);    fclose(outfile);    jpeg_destroy_compress(&cinfo);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -