📄 rip.cpp
字号:
if(y%3==0)
{
*lbc2=*(lbc2++)&0x49;
*lbm2=*(lbm2++)&0x49;
*lby2=*(lby2++)&0x49;
*lbk2=*(lbk2++)&0x49;
}
else if(y%3==1)
{
*lbc2=*(lbc2++)&0x24;
*lbm2=*(lbm2++)&0x24;
*lby2=*(lby2++)&0x24;
*lbk2=*(lbk2++)&0x24;
}
else
{
*lbc2=*(lbc2++)&0x92;
*lbm2=*(lbm2++)&0x92;
*lby2=*(lby2++)&0x92;
*lbk2=*(lbk2++)&0x92;
}
}
else
for(int x=0;x<500;x++)
for(DWORD y=0;y<rh.BytesPerLine;y++)
{
if(y%3==0)
{
*lbc2=*(lbc2++)&0x24;
*lbm2=*(lbm2++)&0x24;
*lby2=*(lby2++)&0x24;
*lbk2=*(lbk2++)&0x24;
}
else if(y%3==1)
{
*lbc2=*(lbc2++)&0x92;
*lbm2=*(lbm2++)&0x92;
*lby2=*(lby2++)&0x92;
*lbk2=*(lbk2++)&0x92;
}
else
{
*lbc2=*(lbc2++)&0x49;
*lbm2=*(lbm2++)&0x49;
*lby2=*(lby2++)&0x49;
*lbk2=*(lbk2++)&0x49;
}
}
}
//////////////////// pass=4 ///////////////////////////////////////
else if(pass==4)
{
if(i%pass==0)
for(int x=0;x<500;x++)
for(DWORD y=0;y<rh.BytesPerLine;y++)
{
if(x%2==0)
{
*lbc2=*(lbc2++)&0xaa;
*lbm2=*(lbm2++)&0xaa;
*lby2=*(lby2++)&0xaa;
*lbk2=*(lbk2++)&0xaa;
}
else
{
*lbc2=*(lbc2++)&0x00;
*lbm2=*(lbm2++)&0x00;
*lby2=*(lby2++)&0x00;
*lbk2=*(lbk2++)&0x00;
}
}
else if(i%pass==1)
for(int x=0;x<500;x++)
for(DWORD y=0;y<rh.BytesPerLine;y++)
{
if(x%2==0)
{
*lbc2=*(lbc2++)&0x55;
*lbm2=*(lbm2++)&0x55;
*lby2=*(lby2++)&0x55;
*lbk2=*(lbk2++)&0x55;
}
else
{
*lbc2=*(lbc2++)&0x00;
*lbm2=*(lbm2++)&0x00;
*lby2=*(lby2++)&0x00;
*lbk2=*(lbk2++)&0x00;
}
}
else if(i%pass==2)
for(int x=0;x<500;x++)
for(DWORD y=0;y<rh.BytesPerLine;y++)
{
if(x%2==0)
{
*lbc2=*(lbc2++)&0x00;
*lbm2=*(lbm2++)&0x00;
*lby2=*(lby2++)&0x00;
*lbk2=*(lbk2++)&0x00;
}
else
{
*lbc2=*(lbc2++)&0xaa;
*lbm2=*(lbm2++)&0xaa;
*lby2=*(lby2++)&0xaa;
*lbk2=*(lbk2++)&0xaa;
}
}
else
for(int x=0;x<500;x++)
for(DWORD y=0;y<rh.BytesPerLine;y++)
{
if(x%2==0)
{
*lbc2=*(lbc2++)&0x00;
*lbm2=*(lbm2++)&0x00;
*lby2=*(lby2++)&0x00;
*lbk2=*(lbk2++)&0x00;
}
else
{
*lbc2=*(lbc2++)&0x55;
*lbm2=*(lbm2++)&0x55;
*lby2=*(lby2++)&0x55;
*lbk2=*(lbk2++)&0x55;
}
}
}
}
////////////////// read orderly //////////////////////////////////////////////////////////////
// one pass,single cache,500 lines height per times,don't dump dot,rip to cache1;
//////////////////////////////////////////////////////////////////////////////////////////////
void CRip::SendMemory(DWORD i)
{
LPBYTE lbc=lpmemc1,lbm=lpmemm1,lby=lpmemy1,lbk=lpmemk1;
ZeroMemory(lpmemc1,500*rh.BytesPerLine);
ZeroMemory(lpmemm1,500*rh.BytesPerLine);
ZeroMemory(lpmemy1,500*rh.BytesPerLine);
ZeroMemory(lpmemk1,500*rh.BytesPerLine);
filer.Seek(sizeof(RipHeader)+i*2000,CFile::begin);
if((rh.Height*4-i*2000)>2000)
{
for(DWORD x=0;x<2000;x++)
{
if((x%4)==0)
{
filer.Read(lby,rh.BytesPerLine);
lby=lby+rh.BytesPerLine;
}
if((x%4)==1)
{
filer.Read(lbm,rh.BytesPerLine);
lbm=lbm+rh.BytesPerLine;
}
if((x%4)==2)
{
filer.Read(lbc,rh.BytesPerLine);
lbc=lbc+rh.BytesPerLine;
}
if((x%4)==3)
{
filer.Read(lbk,rh.BytesPerLine);
lbk=lbk+rh.BytesPerLine;
}
}
}
else
{
for(DWORD x=0;x<rh.Height*4-i*2000;x++)
{
if((x%4)==0)
{
filer.Read(lby,rh.BytesPerLine);
lby=lby+rh.BytesPerLine;
}
if((x%4)==1)
{
filer.Read(lbm,rh.BytesPerLine);
lbm=lbm+rh.BytesPerLine;
}
if((x%4)==2)
{
filer.Read(lbc,rh.BytesPerLine);
lbc=lbc+rh.BytesPerLine;
}
if((x%4)==3)
{
filer.Read(lbk,rh.BytesPerLine);
lbk=lbk+rh.BytesPerLine;
}
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// use for 3 or 4 pass ,500/pass linesheight per strip,send 500 linesheight to lpmemc1、k1、y1、m1 from filer;
// mem1to2():from lpmemc1...to lpmemc2...; pumpdot(): pumping dot arithmetic.
// < " // " sentence is send 500 linesheight to lpmemc1、k1、y1、m1 from filec、m、y、k directly;
//------------------------- read rip file from begin to end ---------------------------
void CRip::SendToMemory(DWORD i)
{
LPBYTE lbc=lpmemc1,lbm=lpmemm1,lby=lpmemy1,lbk=lpmemk1;
if((i==count-pass)&&((rh.Height/(500/pass))!=(ULONG)ceil((float)rh.Height/(500/pass))))
{
filer.Seek(48l+4*i*(500/pass)*rh.BytesPerLine,CFile::begin);
for(unsigned x=0;x<rh.Height-i*(500/pass);x++)
{
filer.Read(lby+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
filer.Read(lbm+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
filer.Read(lbc+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
filer.Read(lbk+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
lby+=rh.BytesPerLine;
lbm+=rh.BytesPerLine;
lbc+=rh.BytesPerLine;
lbk+=rh.BytesPerLine;
}
ZeroMemory(lbc+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
ZeroMemory(lbm+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
ZeroMemory(lby+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
ZeroMemory(lbk+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
}
else if(i>count-pass)
{
ZeroMemory(lbc+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
ZeroMemory(lbm+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
ZeroMemory(lby+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
ZeroMemory(lbk+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
}
else
{
filer.Seek(48l+4*i*(500/pass)*rh.BytesPerLine,CFile::begin);
for(int x=0;x<500/pass;x++)
{
filer.Read(lby+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
filer.Read(lbm+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
filer.Read(lbc+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
filer.Read(lbk+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
lby+=rh.BytesPerLine;
lbm+=rh.BytesPerLine;
lbc+=rh.BytesPerLine;
lbk+=rh.BytesPerLine;
}
}
//--------------------------------------------------------------------------------------
}
///////////////////////////////////////////////////////////////////////////////////////////////
/////// only use for change memory to monochromatic bmp image;( USE FOR DEBUG ) /////
////////////////////////////////////////////////////////////////////////////////////////////////
void CRip::Mem2bmp(DWORD i,LPCVOID pbits, DWORD width, DWORD height)
{
CString string1,string2;
/////////// get strc filename ////////
string2=strs.Left(strs.GetLength()-4);
string2=string2+"_c.bmp";
string1.Format("%d",i);
int x=string2.GetLength();
string2.Insert((x-4),(LPCTSTR)string1);
CFile file(string2,CFile::modeCreate|CFile::modeWrite);
BITMAPFILEHEADER bfheader;
BITMAPINFOHEADER biheader;
RGBQUAD color[2];
bfheader.bfType=0x4d42;
bfheader.bfSize=height*((width+31)/32*4)+2*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bfheader.bfReserved1=0;
bfheader.bfReserved2=0;
bfheader.bfOffBits=2*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
biheader.biBitCount=1;
biheader.biClrImportant=0;
biheader.biClrUsed=0;
biheader.biCompression=0;
biheader.biHeight=height;
biheader.biWidth=width;
biheader.biPlanes=1;
biheader.biSize=sizeof(BITMAPINFOHEADER);
biheader.biSizeImage=((width+31)/32*4)*height;
biheader.biXPelsPerMeter=(long)ceil(10000*rh.XDPI/254.0);
biheader.biYPelsPerMeter=(long)ceil(10000*rh.YDPI/254.0);
color[0].rgbBlue=0xff;
color[0].rgbGreen=0xff;
color[0].rgbRed=0xff;
color[0].rgbReserved=0x0;
color[1].rgbBlue=0x0;
color[1].rgbGreen=0x0;
color[1].rgbRed=0x0;
color[1].rgbReserved=0x0;
file.Write(&bfheader,sizeof(BITMAPFILEHEADER));
file.Write(&biheader,sizeof(BITMAPINFOHEADER));
file.Write(&color,sizeof(color));
file.Write(pbits,height*((width+31)/32*4));
}
///////////////////////////////////////////////////////////////////////////////////////////
Inkstruct CRip::GetInkNums()
{
return InkNums;
}
//------------- read four lines to memory,loop rh.Heignt times;------------------------
void CRip::CalcInks()
{
unsigned dotnum[256]={0};
LPBYTE lp=new BYTE[4*4000];
for(unsigned x=0;x<256;x++)
{
if(x&1)
dotnum[x]++;
if(x&2)
dotnum[x]++;
if(x&4)
dotnum[x]++;
if(x&8)
dotnum[x]++;
if(x&16)
dotnum[x]++;
if(x&32)
dotnum[x]++;
if(x&64)
dotnum[x]++;
if(x&128)
dotnum[x]++;
}
filer.Seek(sizeof(RipHeader),CFile::begin);
for(DWORD h=0;h<rh.Height;h++)
{
filer.Read(lp,4*rh.BytesPerLine);
DWORD y;
LPBYTE lpcopy=lp;
for(y=0;y<rh.BytesPerLine;y++)// yellow line
{
InkNums.Inky+=dotnum[*lpcopy++];
}
for( y=0;y<rh.BytesPerLine;y++)// magenta line
{
InkNums.Inkm+=dotnum[*lpcopy++];
}
for( y=0;y<rh.BytesPerLine;y++)// cyan line
{
InkNums.Inkc+=dotnum[*lpcopy++];
}
for( y=0;y<rh.BytesPerLine;y++)// black line
{
InkNums.Inkk+=dotnum[*lpcopy++];
}
}
delete [] lp;
lp=0;
}
//--------------------------------------------------------------------------------------
void CRip::Reversemem()
{
LPBYTE tempmem=new BYTE[rh.BytesPerLine];
for(int count=0;count<250;count++)
{
CopyMemory(tempmem,lpmemc2+count*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemc2+count*rh.BytesPerLine,lpmemc2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemc2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);
CopyMemory(tempmem,lpmemm2+count*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemm2+count*rh.BytesPerLine,lpmemm2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemm2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);
CopyMemory(tempmem,lpmemy2+count*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemy2+count*rh.BytesPerLine,lpmemy2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemy2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);
CopyMemory(tempmem,lpmemk2+count*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemk2+count*rh.BytesPerLine,lpmemk2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
CopyMemory(lpmemk2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -