这是我在网上搞到的,不过是C的源码。1. 使用说明
1. 在VC IDE 选择<Project->setting->link> 加jpeg.lib
2. 编译程序
2. 原理
程序首先读BITMAP 文件的各像素点的RGB值, library 做压缩 RGB 缓冲区
成JPEG文件或缓冲区.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);ejpeg.c#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]);
}
1. 在VC IDE 选择<Project->setting->link> 加jpeg.lib
2. 编译程序
2. 原理
程序首先读BITMAP 文件的各像素点的RGB值, library 做压缩 RGB 缓冲区
成JPEG文件或缓冲区.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);ejpeg.c#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]);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货