jpg转bmp c语言 linux,C++_C语言实现BMP转换JPG的方法,本文实例讲述了C语言实现BMP转 - phpStudy...

C语言实现BMP转换JPG的方法

本文实例讲述了C语言实现BMP转换JPG的方法。分享给大家供大家参考。具体实现方法如下:

/****************************************************************************

名称: jpeg.c

功能: linux下bmp转化为jpeg程序源代码

日期: 2010.01.26

注意: 编译时加“-ljpeg”(gcc -o bmp2jpg jpeg.c -ljpeg)

*****************************************************************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define JPEG_QUALITY 95 //图片质量

int Bmp2Jpg(const char *bmp_file, const char *jeg_file, const int width, const int height)

{

FILE *fd;

int ret;

unsigned char *data;

long sizeImage;

int depth = 3;

JSAMPROW * row_pointer;

long rgb_index = 0;

int i=0;

struct jpeg_compress_struct cinfo;

struct jpeg_error_mgr jerr;

FILE *outfile;

;

// Read bmp image data

sizeImage = width*height*3;

data = (unsigned char*)malloc(sizeImage);

fd = fopen(bmp_file, "rb");

if(!fd)

{

printf("ERROR1: Can not open the image.\n");

free(data);

return -1;

}

fseek(fd, 54, SEEK_SET);

ret = fread(data, sizeof(unsigned char)*sizeImage, 1, fd);

if(ret == 0)

{

if(ferror(fd))

{

printf("\nERROR2: Can not read the pixel data.\n");

free(data);

fclose(fd);

return -1;

}

}

//Convert BMP to JPG

cinfo.err = jpeg_std_error(&jerr);

//* Now we can initialize the JPEG compression object.

jpeg_create_compress(&cinfo);

if ((outfile = fopen(jeg_file, "wb")) == NULL)

{

fprintf(stderr, "can't open %s\n", jeg_file);

return -1;

}

jpeg_stdio_dest(&cinfo, outfile);

cinfo.image_width = width;

//* image width and height, in pixels

cinfo.image_height = height;

cinfo.input_components = depth;

//* # of color components per pixel

cinfo.in_color_space = JCS_RGB;

//* colorspace of input image

jpeg_set_defaults(&cinfo);

//Now you can set any non-default parameters you wish to.

//Here we just illustrate the use of quality (quantization table) scaling:

jpeg_set_quality(&cinfo, JPEG_QUALITY, TRUE );

//* limit to baseline-JPEG values

jpeg_start_compress(&cinfo, TRUE);

//一次写入

int j=0;

row_pointer = malloc(height*width*3);

char * line[300];

for(i=0;i

{

unsigned char * lineData = NULL;

lineData = malloc(width*3);

line[i]=lineData;

for(j=0;j

{

lineData[j*3+2] = data[rgb_index];

rgb_index ++;

lineData[j*3+1] = data[rgb_index];

rgb_index ++;

lineData[j*3+0] = data[rgb_index];

rgb_index ++;

}

row_pointer[height-i-1] = lineData;

}

jpeg_write_scanlines(&cinfo, row_pointer, height);

jpeg_finish_compress(&cinfo);

jpeg_destroy_compress(&cinfo);

for (i=0; i

{

free(line[i]);

}

free(row_pointer);

free(data);

fclose(fd);

fclose(outfile);

return 0;

}

希望本文所述对大家的C语言程序设计有所帮助。相关阅读:

Linux中禁止root用户SSH登录及修改SSH端口的方法

HttpRequest Get和Post调用其他页面的方法

MySQL安全配置向导mysql_secure_installation详解

win10系统自带的计算器使用方法

js验证输入是否为手机号码或电话号码示例

js 绑定键盘鼠标事件示例代码

js阻止冒泡及jquery阻止事件冒泡示例介绍

win10怎么使用多任务视图?win10多任务视图小技巧汇总

如何将Win10命令提示符窗口设置成半透明?Win10命令提示符窗口设置成半透明的方法

Symfony2学习笔记之模板用法详解

PHP并发多进程处理利器Gearman使用介绍

实例解析iOS中音乐播放器应用开发的基本要点

从零开始搭建MySQL MMM架构

浅谈常用字符串与集合类转换的工具类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用于将jpeg文件转换成为bmp文件, MICROSOFT FOUNDATION CLASS LIBRARY : JpgVSbmp ======================================================================== AppWizard has created this JpgVSbmp DLL for you. This DLL not only demonstrates the basics of using the Microsoft Foundation classes but is also a starting point for writing your DLL. This file contains a summary of what you will find in each of the files that make up your JpgVSbmp DLL. JpgVSbmp.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp) file, but they should export the makefiles locally. JpgVSbmp.h This is the main header file for the DLL. It declares the CJpgVSbmpApp class. JpgVSbmp.cpp This is the main DLL source file. It contains the class CJpgVSbmpApp. JpgVSbmp.rc This is a listing of all of the Microsoft Windows resources that the program uses. It includes the icons, bitmaps, and cursors that are stored in the RES subdirectory. This file can be directly edited in Microsoft Visual C++. JpgVSbmp.clw This file contains information used by ClassWizard to edit existing classes or add new classes. ClassWizard also uses this file to store information needed to create and edit message maps and dialog data maps and to create prototype member functions. res\JpgVSbmp.rc2 This file contains resources that are not edited by Microsoft Visual C++. You should place all resources not editable by the resource editor in this file. JpgVSbmp.def This file contains information about the DLL that must be provided to run with Microsoft Windows. It defines parameters such as the name and description of the DLL. It also exports functions from the DLL. ///////////////////////////////////////////////////////////////////////////// Other standard files: StdAfx.h, StdAfx.cpp These files are used to build a precompiled header (PCH) file named JpgVSbmp.pch and a precompiled types file named StdAfx.obj. Resource.h This is the standard header file, which defines new resource IDs. Microsoft Visual C++ reads and updates this file. ///////////////////////////////////////////////////////////////////////////// Other notes: AppWizard uses "TODO:" to indicate parts of the source code you should add to or customize.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值