sorry, I missed something:
#define IMGWIDTH 640 // please define the max size of the image!
#define IMGHEIGHT 480
void BMPDelBlue(char *inFileName,char* outFileName)
{
FILE *infile,*outfile;
BYTE Buff[IMGWIDTH*IMGHEIGHT*3]; // or alloc memory for Buff
BYTE Head[54];
int i,j,p;
short ImgWidth,ImgHeight;
BYTE bt1,bt2,bt3;
BYTE *stuff;
原理很简单:
1。一幅图可以用一个二维数组表示,数组元素就是某点的颜色;
2。颜色可以分解为R G B 三色;
3。循环处理所有点,用 + - * / and not or xor 求补等算法实现颜色变换;
4。如果必要,可以按照BMP的格式存储处理后的图片数据到磁盘文件.
去兰例程:
image1.picture.loadfromfile(yourBMP);
deBlueButton.onclick:
deBlue(degree:real); //degree是0--1间的实数,表示要去除多少兰色;
procedure deBlue(degree:real);
var
deb,i,j:integer;
begin
deb:=RGB(255,255,degree*255);
for i:=0 to image1.picture.width-1
for j:=0 to image1.picture.height-1 do
image1.picture.canvas.pexils[i,j]:=
image1.picture.canvas.pexils[i,j] and deb;
end;{deBlue}