如何用CxImage将jpg转为bmp

lwx_work 2009-02-03 08:38:18
我在Cximage网站上下到了它的源码,里边有很多工程,我不知道怎么使用,这里应该包含很多功能,我只想实现jpg图片解压成bmp

1、我要如何设置VC的编译环境?
2、我要包含哪个库文件和头文件?
3、如何用过的,具体的API也说一下

小弟是在菜鸟,请指教!
...全文
477 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
byxdaz 2009-02-05
  • 打赏
  • 举报
回复
关于CXimage的用法,仔细阅读它的文档和demo,网络上有很多相关资料,google一下
smartlife 2009-02-04
  • 打赏
  • 举报
回复
// testjpg.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include "stdlib.h"
#include "jpeglib.h"

typedef unsigned char BYTE;

void SaveBitmap(struct jpeg_decompress_struct& cinfo, BYTE* pBit)
{
if (!pBit) return;

BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biBitCount = cinfo.num_components * 8;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biWidth = cinfo.image_width;
bmi.bmiHeader.biHeight = cinfo.image_height;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biSizeImage = bmi.bmiHeader.biWidth * bmi.bmiHeader.biHeight * cinfo.num_components;

BITMAPFILEHEADER bmfh;
ZeroMemory(&bmfh, sizeof(BITMAPFILEHEADER));
bmfh.bfSize = sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFO) + bmi.bmiHeader.biSizeImage;
bmfh.bfType = 0x4d42;

FILE* fp;
fp = fopen("c:\\w.bmp", "w");
if (fp)
{
fwrite(&bmfh, sizeof(char), sizeof(BITMAPFILEHEADER), fp);
fwrite(&bmi, sizeof(char), sizeof(BITMAPINFOHEADER), fp);
fwrite(pBit, sizeof(char), bmi.bmiHeader.biSizeImage, fp);
fclose(fp);
}else
{
printf("error\n");
}

}

int _tmain(int argc, _TCHAR* argv[])
{
unsigned int i = 1000;



FILE *f = fopen("c:\\a.jpg","rb");
if (f==NULL)
{
printf("Open file error!\n");
return 0;
}
fseek(f, 0, SEEK_END);
unsigned int ilength = ftell(f);
fseek(f, 0, SEEK_SET);
BYTE* lpBuffer = new BYTE[ilength];
int nLen = fread(lpBuffer,sizeof(char), ilength, f);

int j = 1;
DWORD dwStart = GetTickCount();
while (j--)
{
struct jpeg_decompress_struct cinfo ;
struct jpeg_error_mgr jerr;

// cinfo.err = jpeg_std_error(&jerr);
cinfo.err = &jerr;
cinfo.jpeg_create_decompress();

jpeg_const_src(&cinfo, lpBuffer, nLen);
cinfo.jpeg_read_header(TRUE);
BYTE* data = new BYTE [cinfo.image_width*cinfo.image_height*cinfo.num_components];
cinfo.jpeg_start_decompress();

JSAMPROW row_pointer[1];
while (cinfo.output_scanline < cinfo.output_height)
{
row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline-1)*cinfo.image_width*cinfo.num_components];
cinfo.jpeg_read_scanlines(row_pointer , 1);
}
//save
SaveBitmap(cinfo, data);

cinfo.jpeg_finish_decompress();
cinfo.jpeg_destroy_decompress();

delete []data;
}

printf("%d frame use total time = %d milisecond\n", i*20, GetTickCount() - dwStart);


fclose(f);

// getchar();


return 0;
}

dxk01 2009-02-03
  • 打赏
  • 举报
回复
同意3楼
xsc2001 2009-02-03
  • 打赏
  • 举报
回复
只是将jpg转换成bmp还不如用CImage类,这个类很简单,用法如下:
包括头文件#include <atlimage.h>
CImage img;
img.Load("d:\\123.jpg");//读取JPG图片
img.Save("d:\\123.bmp");//保存成BMP格式
byxdaz 2009-02-03
  • 打赏
  • 举报
回复
1、VC的编译环境中加入 cximage.lib j2k.lib jasper.lib jbig.lib Jpeg.lib png.lib Tiff.lib zlib.lib
2、包含库文件和头文件:include目录下所有文件和tiff目录下的所有文件
3、用法实例:
CxImage m_cxImage;
cxImage.Load(jpgfilename,CXIMAGE_FORMAT_JPG);
cxImage.Save(bmpfilename,CXIMAGE_FORMAT_BMP);
fandh 2009-02-03
  • 打赏
  • 举报
回复
没有用过!你最好找到里面的接口!~
路人乙2019 2009-02-03
  • 打赏
  • 举报
回复
3楼的正解
lwx_work 2009-02-03
  • 打赏
  • 举报
回复
你说那个是什么类,是MFC自带的吗
jbhas 2009-02-03
  • 打赏
  • 举报
回复
3楼的正解

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧