64,639
社区成员
发帖
与我相关
我的任务
分享
Emboss_f(FILE *fpi, FILE *fpo) //fpi指向原文件,fpo为修改后的文件
{
int nCounti,nCountj,nCountk,nCountl;
int nRed,nBlue,nGreen;
int nDx=1,nDy=1;
unsigned int nPixel1,nPixel2,nPixel;
fread((char *)&strHead,1,sizeof(strHead),fpi);
fread((char *)&strInfo,1,sizeof(strInfo),fpi);
for(nCounti=0;nCounti<256;nCounti++)
fread((char *)&straPla[nCounti],1,sizeof(RGBQUAD),fpi);
fwrite((char *)&strHead,1,sizeof(strHead),fpo);
fwrite((char*)&strInfo,1,sizeof(strInfo),fpo);
for(nCounti=0;nCounti<256;nCounti++)
fwrite((char *)&straPla[nCounti],1,sizeof(RGBQUAD),fpo);
---------------------------------------------------------------------------------------
for(nCounti=0;nCounti<8;nCounti++)
{
for(nCountj=0;nCountj<64;nCountj++)
fread(&naImage[nCountj][0],1,nWidth,fpi);
for(nCountk=0;nCountk<64-1;nCountk++)
{
for(nCountl=0;nCountl<nWidth-1;nCountl++)
{
nPixel1=(unsigned char)(naImage[nCountk][nCountl]);
nPixel2=(unsigned char)(naImage[nCountk+nDx][nCountl+nDy]);
nRed=fabs(straPla[nPixel1].rgbRed-straPla[nPixel2].rgbRed+128);
nGreen=fabs(straPla[nPixel1].rgbGreen-straPla[nPixel2].rgbGreen+128);
nBlue=fabs(straPla[nPixel1].rgbBlue-straPla[nPixel2].rgbBlue+128);
nPixel=Match_f(nRed,nGreen,nBlue);
naImage[nCountk][nCountl]=nPixel;
}
}
for(nCountl=0;nCountl<nWidth-1;nCountl++)
{
nPixel1=(unsigned char)(naImage[63][nCountl]);
nPixel2=(unsigned char)(naImage[63][nCountl+nDy]);
nRed=fabs(straPla[nPixel1].rgbRed-straPla[nPixel2].rgbRed+128);
nGreen=fabs(straPla[nPixel1].rgbGreen-straPla[nPixel2].rgbGreen+128);
nBlue=fabs(straPla[nPixel1].rgbBlue-straPla[nPixel2].rgbBlue+128);
nPixel=Match_f(nRed,nGreen,nBlue);
naImage[63][nCountl]=nPixel;
}
for(nCountj=0;nCountj<64;nCountj++)
fwrite(&naImage[nCountj][0],1,nWidth,fpo);
}
}
file.read(( char*)&fileheader, sizeof(fileheader));
file.read(( char*)&infoheader, sizeof(infoheader));
Emboss_f(FILE *fpi, FILE *fpo) //fpi指向原文件,fpo为修改后的文件
{
int nCounti,nCountj,nCountk,nCountl;
int nRed,nBlue,nGreen;
int nDx=1,nDy=1;
unsigned int nPixel1,nPixel2,nPixel;
fread((char *)&strHead,1,sizeof(strHead),fpi);
fread((char *)&strInfo,1,sizeof(strInfo),fpi);
for(nCounti=0;nCounti<256;nCounti++)
{
fread((char *)&straPla[nCounti],1,sizeof(RGBQUAD),fpi);
}
//到了这里应该是接触到了fpi文件中的像素数据吧 怎么取呢???
#include <iostream>
#include <fstream>
#include "windows.h"
using namespace std;
UINT width;
UINT height;
UINT size;
unsigned short bitcount;
fstream file;
char* data;
void draw()
{
int i = 0,j = 0;
while(i<width*height) data[i++] = char(255);//白色
int x1 = 100, y1 = 100, x2 = 200, y2 = 200;
int x3 = 125, y3 = 125, x4 = 175, y4 = 175;
for (i=0;i<width;i++)
{
for (j=0;j<width;j++)
{
if ( j>=x1 && j<=x2 && ( (i>=y1&&i<y3) || (i>y4&& i<=y2) ) )
data[i*width+j] = char(0);
else
if ( i>=y3 && i<=y4 && ( (j>=x1&&j<x3) ||(j>x4&&j<=x2) ) )
data[i*width+j] = char(0);
}
}
}
void main()
{
BITMAPFILEHEADER fileheader;
BITMAPINFOHEADER infoheader;
char filename[255];
cout<<"请输入文件名:"<<endl;
cin>>filename;
file.open(filename, ios::out | ios::in | ios::binary);
if (!file)
{
MessageBox(NULL,"文件打开失败!","警告",0);
return;
}
file.read(( char*)&fileheader, sizeof(fileheader));
file.read(( char*)&infoheader, sizeof(infoheader));
size = fileheader.bfSize;
width = infoheader.biWidth;
if (width%4)
width = width/4*4+4;//储存宽度和实际宽度不一样,修正
height = infoheader.biHeight;
if ((bitcount=infoheader.biBitCount) != 8)
{
MessageBox(NULL,"不支持的位图!","警告",0);
file.close();
return;
}
// char t;
// file.seekg(fileheader.bfOffBits,ios::beg);
// for (int i=0;i<40*width;i++)
// {
// file.read(&t,1);
// cout<<int(t);
// if(!( (i+1)%width)) cout<<endl;
// }
data = new char[width*height];
draw();
file.seekp(fileheader.bfOffBits,ios::beg);
file.write(data, width*height);
file.close();
delete [] data;
}