求BMP转换成JPEG算法 总写不成功,希望有个事例 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #include <stdlib.h>#include <stdio.h>#include "ejpeg.h"void main(int argc,char* argv[]){ FILE *infile; BYTE Head[54]; BYTE *Buff; DWORD ImgWidth,ImgHeight,i,j,p; BYTE bt0,bt1,bt2; BYTE stuff[4]; if(argc<3) { printf("Usage: %s inputfile outputfile\n",argv[0]); return;} infile=fopen(argv[1],"rb"); if(infile==NULL) { printf("Open 24 bit bitmap file failed!"); return;} fread(Head,54,1,infile); ImgWidth =*(Head+18)+(*(Head+19))*256; ImgHeight=*(Head+22)+(*(Head+23))*256; p=(ImgWidth*3)%4; printf("Image width: %d height: %d \n",ImgWidth,ImgHeight); Buff = (BYTE *)malloc(ImgWidth*ImgHeight*3); if(!Buff) { printf("Malloc memory failed!\n"); return;} for(i=0;i<ImgHeight;i++) // read bitmap pixels array to buffer { for(j=0;j<ImgWidth;j++) { fread((BYTE *)&bt0,1,1,infile); fread((BYTE *)&bt1,1,1,infile); fread((BYTE *)&bt2,1,1,infile); *(Buff+i*ImgWidth*3+j*3+0)= bt0; *(Buff+i*ImgWidth*3+j*3+1)= bt1; *(Buff+i*ImgWidth*3+j*3+2)= bt2; } if(p!=0) fread(stuff,1,(4-p),infile); } fclose(infile); RGBtoJPEGFile(Buff,ImgWidth,ImgHeight,argv[2]);}//ejpeg.htypedef unsigned char BYTE;typedef unsigned short uint16;typedef unsigned long DWORD;void RGBtoJPEGBuff(BYTE* Buff,DWORD ImageWidth,DWORD ImageHeight,BYTE *outJPEGBuff,DWORD *BuffLen);void RGBtoJPEGFile(BYTE* Buff,DWORD ImageWidth,DWORD ImageHeight,char* outFileName); 大哥,这个不行啊,我在XP下用了它,出现问题1.转换后不清析2.只转换前部分,后面乱了3.8bit的bmp无法转换 MFC关于控件的使用 CreateEvent中的第四个参数是什么? 急求一个进制转换函数~~ 32位整型转16进制!! 如何用vc程序控制一个自建文件夹得属性 C++初学者的问题,万谢万谢 不是很菜的问题! 文件操作问题—— 哪里有VC++的电子书下载? 请问文件问题~~~ Socket按固定字节数发送数据出现数据包重新分包的情况(如两个256字节数据包 被分成一个374字节和一个128字节被接收) 问1个网络I/O的初级问题: 哪里有visual studio.net 2003英文版下载?
#include <stdio.h>
#include "ejpeg.h"void main(int argc,char* argv[])
{
FILE *infile;
BYTE Head[54];
BYTE *Buff;
DWORD ImgWidth,ImgHeight,i,j,p;
BYTE bt0,bt1,bt2;
BYTE stuff[4]; if(argc<3)
{ printf("Usage: %s inputfile outputfile\n",argv[0]); return;}
infile=fopen(argv[1],"rb");
if(infile==NULL)
{ printf("Open 24 bit bitmap file failed!"); return;} fread(Head,54,1,infile);
ImgWidth =*(Head+18)+(*(Head+19))*256;
ImgHeight=*(Head+22)+(*(Head+23))*256;
p=(ImgWidth*3)%4; printf("Image width: %d height: %d \n",ImgWidth,ImgHeight);
Buff = (BYTE *)malloc(ImgWidth*ImgHeight*3);
if(!Buff) { printf("Malloc memory failed!\n"); return;} for(i=0;i<ImgHeight;i++) // read bitmap pixels array to buffer
{
for(j=0;j<ImgWidth;j++)
{
fread((BYTE *)&bt0,1,1,infile);
fread((BYTE *)&bt1,1,1,infile);
fread((BYTE *)&bt2,1,1,infile);
*(Buff+i*ImgWidth*3+j*3+0)= bt0;
*(Buff+i*ImgWidth*3+j*3+1)= bt1;
*(Buff+i*ImgWidth*3+j*3+2)= bt2;
}
if(p!=0) fread(stuff,1,(4-p),infile);
}
fclose(infile);
RGBtoJPEGFile(Buff,ImgWidth,ImgHeight,argv[2]);
}//ejpeg.h
typedef unsigned char BYTE;
typedef unsigned short uint16;
typedef unsigned long DWORD;void RGBtoJPEGBuff(BYTE* Buff,DWORD ImageWidth,DWORD ImageHeight,BYTE *outJPEGBuff,DWORD *BuffLen);
void RGBtoJPEGFile(BYTE* Buff,DWORD ImageWidth,DWORD ImageHeight,char* outFileName);
1.转换后不清析
2.只转换前部分,后面乱了
3.8bit的bmp无法转换