⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rop2.cpp

📁 一个更为先进的嵌入式操作系统.采用RMS线程调度算法,具有信号量等同步对象.亦包括GUI. 通过该系统您可以极大知道Windows的内部秘密.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "gos.h"
#include "rop2.h"

const WORD CROP4::m_aColor16[16]=
{
	0x0000,0x8000,0x0400,0x8400,0x0010,0x8010,0x0410,0xc618,
	0x8410,0xf800,0x07e0,0xffe0,0x001f,0xf81f,0x07ff,0xffff,
};
const DWORD CROP4::m_aColor32[16]=
{
	0x00000000,0x80800000,0x10008000,0x90808000,
	0x02000080,0x82800080,0x12008080,0xdbc0c0c0,
	0x92808080,0xe0ff0000,0x1c00ff00,0xfcffff00,
	0x030000ff,0xe3ff00ff,0x1f00ffff,0xffffffff,
};

void CROP::SelectObject(CBitmap* pBitmap)
{
	const BITMAP &bmp=pBitmap->GetBitmap();
	int y,x=bmp.bmBitsPixel;
	PBYTE pBits=PBYTE(bmp.bmBits);
	switch(x)
	{
	case 1:GetProc=CROP1::GetProc;break;
	case 4:GetProc=CROP4::GetProc;break;
	case 8:GetProc=CROP8::GetProc;break;
	case 16:GetProc=CROP16::GetProc;break;
	default:GetProc=CROP24::GetProc;
	}

	GETBMPWIDTHBYTES(y,bmp.bmWidth,x);

	if(bmp.bmWidth<0)
	{
		x=-x;
		pBits+=(x*(bmp.bmWidth+1))/8;
	}
	if(bmp.bmHeight<0)
	{
		y=-y;
		pBits+=y*(bmp.bmHeight+1);
	}

	if(bmp.bmBitsPixel<8)y*=8;
	else x/=8;
	m_nStepX=x;
	m_nStepY=y;

	m_pBits=pBits;
}
void CROP::SetRopGetColor(CDC* pDestDC,CBitmap* pSrcBmp)
{
	DWORD nROP;
	c=DWORD(&pDestDC->GetRopObj().c);

	if(pSrcBmp->GetBitmap().bmBitsPixel<=8 && pDestDC->GetCurrentPalette())
	{
		i=DWORD(pDestDC->GetCurrentPalette()->GetTable());
		if(i>0)
		{
			SetROP(R2_GETCOLORINDEX);
			return;
		}
	}

	switch(pDestDC->GetCurrentBitmap()->GetBitmap().bmBitsPixel)
	{
	case 16:
		if(pSrcBmp->GetBitmap().bmType&BMP_TYPEMASK)
		{
			ROP=Color555To565;
			return;
		}
		nROP=R2_GETCOLOR16;
		break;
	case 8:
		nROP=R2_GETCOLOR8;
		break;
	case 4:
		nROP=R2_GETCOLOR4;
		break;
	case 1:
		nROP=R2_GETCOLOR1;
		break;
	default:
		nROP=R2_GETCOLOR24;
		break;
	}
	SetROP(nROP);
}
void CROP::RpNone(CROP &rp)
{
	/* 无操作 */
}
void CROP::RpIfPen(CROP &rp)
{
	if(rp.c==rp.i)rp.ROP(rp);
}
void CROP::RpIfNotPen(CROP &rp)
{
	if(rp.c!=rp.i)rp.ROP(rp);
}
void CROP::Color555To565(CROP &rp)
{
	DWORD clr,c=*PWORD(rp.p);
	clr=(c&0x07FE0)<<1;
	clr|=(c>>4)&0x20;
	*PDWORD(rp.c)=clr|(c&0x001F);
}
void CROP::Color32To24(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD c=p[0];
	c|=DWORD(p[1])<<16;
	c|=DWORD(p[2])<<24;
	*PDWORD(rp.c)=c;
}

//24位ROP渲染
void CROP24::CopyPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]=BYTE(c);p[1]=BYTE(c>>8);p[2]=BYTE(c>>16);
}
void CROP24::XorPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]^=BYTE(c);p[1]^=BYTE(c>>8);p[2]^=BYTE(c>>16);
}
void CROP24::AndPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]&=BYTE(c);p[1]&=BYTE(c>>8);p[2]&=BYTE(c>>16);
}
void CROP24::AndNotPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=~rp.c;
	p[0]&=BYTE(c);p[1]&=BYTE(c>>8);p[2]&=BYTE(c>>16);
}
void CROP24::AndPenNot(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]=~p[0]&BYTE(c);p[1]=~p[1]&BYTE(c>>8);p[2]=~p[2]&BYTE(c>>16);
}
void CROP24::OrPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]|=BYTE(c);p[1]|=BYTE(c>>8);p[2]|=BYTE(c>>16);
}
void CROP24::OrNotPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=~rp.c;
	p[0]|=BYTE(c);p[1]|=BYTE(c>>8);p[2]|=BYTE(c>>16);
}
void CROP24::OrPenNot(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]=~p[0]|BYTE(c);p[1]=~p[1]|BYTE(c>>8);p[2]=~p[2]|BYTE(c>>16);
}
void CROP24::NotCopyPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=~rp.c;
	p[0]=BYTE(c);p[1]=BYTE(c>>8);p[2]=BYTE(c>>16);
}
void CROP24::NotAndPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]&=BYTE(c);p[0]=~p[0];
	c>>=8;p[1]&=BYTE(c);p[1]=~p[1];
	c>>=8;p[2]&=BYTE(c);p[2]=~p[2];
}
void CROP24::NotOrPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]|=BYTE(c);p[0]=~p[0];
	c>>=8;p[1]|=BYTE(c);p[1]=~p[1];
	c>>=8;p[2]|=BYTE(c);p[2]=~p[2];
}
void CROP24::NotXorPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);DWORD c=rp.c;
	p[0]^=BYTE(c);p[0]=~p[0];
	c>>=8;p[1]^=BYTE(c);p[1]=~p[1];
	c>>=8;p[2]^=BYTE(c);p[2]=~p[2];
}
void CROP24::AlphaBlend(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD r,g,b,c=rp.c,clr=rp.a;
	r=(c>>16)&0xff;g=(c>>8)&0xff;b=c&0xff;
	c=256-clr;
	r*=c;r+=127;
	g*=c;g+=127;
	b*=c;b+=127;
	c=p[2]*clr+r;p[2]=BYTE(c>>8);
	c=p[1]*clr+g;p[1]=BYTE(c>>8);
	c=p[0]*clr+b;p[0]=BYTE(c>>8);
}
void CROP24::AlphaPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD c,clr=rp.a;
	c=p[2]*clr+rp.r;p[2]=BYTE(c>>8);
	c=p[1]*clr+rp.g;p[1]=BYTE(c>>8);
	c=p[0]*clr+rp.b;p[0]=BYTE(c>>8);
}
void CROP24::AlphaBlendPen(CROP &rp)
{
	CopyPen(rp);
	AlphaPen(rp);
}

//24位设备的像素操作
void CROP24::GetColorIndex(CROP &rp)
{
	PDWORD aColor=PDWORD(rp.i);
	PBYTE p=PBYTE(rp.p);
	DWORD c=p[0];
	c|=DWORD(p[1])<<16;
	c|=DWORD(p[2])<<24;
	*PDWORD(rp.c)=aColor[c];
}
void CROP24::GetColor1(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD c;
	c=p[2];c|=p[1];c|=p[0];
	*PDWORD(rp.c)=c?1:0;
}
void CROP24::GetColor4(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD r=p[2],g=p[1],b=p[0],h;
	h=r|g|b;h>>=4;h&=8;
	r>>=6;r|=r>>1;r&=1;
	g>>=5;g|=g>>1;g&=2;
	b>>=4;b|=b>>1;b&=4;
	*PDWORD(rp.c)=r|g|b|h;
}
void CROP24::GetColor8(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD r,g,b;
	r=p[2];r&=0xe0;
	g=p[1];g>>=5;g<<=2;
	b=p[0];b>>=6;
	*PDWORD(rp.c)=r|g|b;
}
void CROP24::GetColor16(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD r,g,b;
	r=p[2];r>>=3;r<<=11;
	g=p[1];g>>=2;g<<=5;
	b=p[0];b>>=3;
	*PDWORD(rp.c)=r|g|b;
}
void CROP24::GetColor24(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD c=p[0];
	c|=DWORD(p[1])<<16;
	c|=DWORD(p[2])<<24;
	*PDWORD(rp.c)=c;
}
void CROP24::RpIfScr(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD r,g,b=p[0];
	r=p[2];r<<=16;
	g=p[1];g<<=8;
	if((r|g|b)==rp.i)rp.ROP(rp);
}
void CROP24::RpIfNotScr(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	DWORD r,g,b=p[0];
	r=p[2];r<<=16;
	g=p[1];g<<=8;
	if((r|g|b)!=rp.i)rp.ROP(rp);
}
PFNROP CROP24::GetProc(int nRop)
{
	PFNROP pProc;
	switch(nRop)
	{
	case R2_COPYPEN:pProc=CopyPen;break;
	case R2_PRVRPIFSCR:pProc=RpIfScr;break;
	case R2_PRVRPIFNOTSCR:pProc=RpIfNotScr;break;
	case R2_PRVRPIFPEN:pProc=RpIfPen;break;
	case R2_PRVRPIFNOTPEN:pProc=RpIfNotPen;break;
	case R2_XORPEN:pProc=XorPen;break;
	case R2_MASKPEN:pProc=AndPen;break;
	case R2_MASKNOTPEN:pProc=AndNotPen;break;
	case R2_MASKPENNOT:pProc=AndPenNot;break;
	case R2_MERGEPEN:pProc=OrPen;break;
	case R2_MERGENOTPEN:pProc=OrNotPen;break;
	case R2_MERGEPENNOT:pProc=OrPenNot;break;
	case R2_NOTCOPYPEN:pProc=NotCopyPen;break;
	case R2_NOTMASKPEN:pProc=NotAndPen;break;
	case R2_NOTMERGEPEN:pProc=NotOrPen;break;
	case R2_NOTXORPEN:pProc=NotXorPen;break;
	case R2_ALPHAPEN:pProc=AlphaPen;break;
	case R2_ALPHABLEND:pProc=AlphaBlend;break;
	case R2_ALPHABLENDPEN:pProc=AlphaBlendPen;break;
	case R2_GETCOLORINDEX:pProc=GetColorIndex;break;
	case R2_GETCOLOR1:pProc=GetColor1;break;
	case R2_GETCOLOR4:pProc=GetColor4;break;
	case R2_GETCOLOR8:pProc=GetColor8;break;
	case R2_GETCOLOR16:pProc=GetColor16;break;
	case R2_GETCOLOR24:pProc=GetColor24;break;
	case R2_SETPENCOLOR:pProc=SetPenColor;break;
	case R2_COPYPALETTE:pProc=CopyPalette;break;
	default:
		pProc=RpNone;break;
	}
	return pProc;
}
void CROP24::SetPenColor(CROP &rp)
{
	DWORD c=rp.c;
	rp.r=(c&0xff);
	rp.g=(c>>8)&0xff;
	rp.b=(c>>16)&0xff;
	rp.c=(rp.r<<16)|(rp.g<<8)|(rp.b);
	if(c & 0xff000000)
	{
		c>>=24;rp.a=c;c=256-c;
		rp.r*=c;rp.r+=127;
		rp.g*=c;rp.g+=127;
		rp.b*=c;rp.b+=127;
	}
	else rp.a=0;
}
void CROP24::CopyPalette(CROP &rp)
{
	int nCount=rp.c;
	PBYTE pSrc=PBYTE(rp.a);
	PBYTE pDest=PBYTE(rp.i);
	if(nCount<0)
	{
		while(nCount++)
		{
			pDest[0]=pSrc[2];
			pDest[1]=pSrc[1];
			pDest[2]=pSrc[0];
			pDest+=4;pSrc+=4;
		}
	}
	else
	{
		nCount*=sizeof(DWORD);
		CopyMemory(pDest,pSrc,nCount);
	}
}

//16位ROP渲染
void CROP16::CopyPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p=WORD(rp.c);
}
void CROP16::XorPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p^=WORD(rp.c);
}
void CROP16::AndPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p&=WORD(rp.c);
}
void CROP16::AndNotPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p&=WORD(~rp.c);
}
void CROP16::AndPenNot(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p=~(*p)&WORD(rp.c);
}
void CROP16::OrPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p|=WORD(rp.c);
}
void CROP16::OrNotPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p|=WORD(~rp.c);
}
void CROP16::OrPenNot(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p=~*p|WORD(rp.c);
}
void CROP16::NotCopyPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p=WORD(~rp.c);
}
void CROP16::NotAndPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p&=WORD(rp.c);*p=~*p;
}
void CROP16::NotOrPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p|=WORD(rp.c);*p=~*p;
}
void CROP16::NotXorPen(CROP &rp)
{
	PWORD p=PWORD(rp.p);
	*p^=WORD(rp.c);*p=~*p;
}
void CROP16::AlphaPen(CROP &rp)
{
	DWORD r,g,b,c=*PWORD(rp.p),a=rp.a;
	r=c>>11;r=(r<<3)|(r>>2);
	r*=a;r+=rp.r;r>>=11;r<<=11;
	g=c<<21;g>>=26;g=(g<<2)|(g>>4);
	g*=a;g+=rp.g;g>>=10;g<<=5;
	b=c&0x1f;b=(b<<3)|(b>>2);
	b*=a;b+=rp.b;b>>=11;
	*PWORD(rp.p)=WORD(r|g|b);
}
void CROP16::AlphaBlend(CROP &rp)
{
	DWORD r,g,b,c=*PWORD(rp.p),a=rp.a;
	DWORD ar,ag,ab,ac=rp.c,aa=256-a;
	ar=ac>>11;ar=(ar<<3)|(ar>>2);
	ar*=aa;ar+=127;
	ag=ac<<21;ag>>=26;ag=(ag<<2)|(ag>>4);
	ag*=aa;ag+=127;
	ab=ac&0x1f;ab=(ab<<3)|(ab>>2);
	ab*=aa;ab+=127;
	r=c>>11;r=(r<<3)|(r>>2);
	r*=a;r+=ar;r>>=11;r<<=11;
	g=c<<21;g>>=26;g=(g<<2)|(g>>4);
	g*=a;g+=ag;g>>=10;g<<=5;
	b=c&0x1f;b=(b<<3)|(b>>2);
	b*=a;b+=ab;b>>=11;
	*PWORD(rp.p)=WORD(r|g|b);
}

void CROP16::AlphaBlendPen(CROP &rp)
{
	CopyPen(rp);
	AlphaPen(rp);
}

//16位ROP操作
void CROP16::GetColorIndex(CROP &rp)
{
	PDWORD aColor=PDWORD(rp.i);
	*PDWORD(rp.c)=aColor[*PWORD(rp.p)];
}
void CROP16::GetColor1(CROP &rp)
{
	*PDWORD(rp.c)=*PWORD(rp.p)?1:0;
}
void CROP16::GetColor4(CROP &rp)
{
	DWORD c=*PWORD(rp.p);
	DWORD r=c<<16,g=c<<21,b=c<<27,h;
	h=r|g|b;h>>=28;h&=8;
	r>>=30;r|=r>>1;r&=1;
	g>>=29;g|=g>>1;g&=2;
	b>>=28;b|=b>>1;b&=4;
	*PDWORD(rp.c)=r|g|b|h;
}
void CROP16::GetColor8(CROP &rp)
{
	DWORD r,g,b,c=*PWORD(rp.p);
	r=(c>>8)&0xe0;
	g=(c>>6)&0x1c;
	b=(c>>3)&3;
	*PDWORD(rp.c)=r|g|b;
}
void CROP16::GetColor16(CROP &rp)
{
	*PDWORD(rp.c)=*PWORD(rp.p);
}
void CROP16::GetColor24(CROP &rp)
{
	DWORD r,g,b,c=*PWORD(rp.p);
	r=c>>11;r=(r<<3)|(r>>2);r<<=16;
	g=c<<21;g>>=26;g=(g<<2)|(g>>4);g<<=8;
	b=c<<27;b>>=27;b=(b<<3)|(b>>2);
	*PDWORD(rp.c)=r|g|b;
}
void CROP16::RpIfScr(CROP &rp)
{
	DWORD c=*PWORD(rp.p);
	if(c==rp.i)rp.ROP(rp);
}
void CROP16::RpIfNotScr(CROP &rp)
{
	DWORD c=*PWORD(rp.p);
	if(c!=rp.i)rp.ROP(rp);
}
void CROP16::SetPenColor(CROP &rp)
{
	DWORD c=rp.c;
	if(c & 0xff000000)
	{
		rp.r=(c&0xff);
		rp.g=(c>>8)&0xff;
		rp.b=(c>>16)&0xff;
		rp.c=(rp.r<<16)|(rp.g<<8)|(rp.b);
		c>>=24;rp.a=c;c=256-c;
		rp.r*=c;rp.r+=127;
		rp.g*=c;rp.g+=127;
		rp.b*=c;rp.b+=127;
	}
	else
	{
		rp.r=(c>>3)&31;
		rp.g=(c>>10)&63;
		rp.b=(c>>19)&31;
		rp.c=(rp.r<<11)|(rp.g<<5)|rp.b;
		rp.a=0;
	}
}
void CROP16::CopyPalette(CROP &rp)
{
	DWORD r,g,b,c;
	int nCount=rp.c;
	PDWORD pSrc=PDWORD(rp.a);
	PDWORD pDest=PDWORD(rp.i);
	if(nCount<0)
	{
		while(nCount++)
		{
			c=*pSrc++;
			r=(c<<8)&0xf800;g=(c<<3)&0x07e0;b=(c>>3)&0x001f;
			*pDest++=r|g|b;
		}

	}
	else
	{
		while(nCount--)
		{
			c=*pSrc++;
			r=(c>>8)&0xf800;g=(c>>5)&0x07e0;b=(c>>3)&0x001f;
			*pDest++=r|g|b;
		}
	}
}
PFNROP CROP16::GetProc(int nRop)
{
	PFNROP pProc;
	switch(nRop)
	{
	case R2_COPYPEN:pProc=CopyPen;break;
	case R2_PRVRPIFSCR:pProc=RpIfScr;break;
	case R2_PRVRPIFNOTSCR:pProc=RpIfNotScr;break;
	case R2_PRVRPIFPEN:pProc=RpIfPen;break;
	case R2_PRVRPIFNOTPEN:pProc=RpIfNotPen;break;
	case R2_XORPEN:pProc=XorPen;break;
	case R2_MASKPEN:pProc=AndPen;break;
	case R2_MASKNOTPEN:pProc=AndNotPen;break;
	case R2_MASKPENNOT:pProc=AndPenNot;break;
	case R2_MERGEPEN:pProc=OrPen;break;
	case R2_MERGENOTPEN:pProc=OrNotPen;break;
	case R2_MERGEPENNOT:pProc=OrPenNot;break;
	case R2_NOTCOPYPEN:pProc=NotCopyPen;break;
	case R2_NOTMASKPEN:pProc=NotAndPen;break;
	case R2_NOTMERGEPEN:pProc=NotOrPen;break;
	case R2_NOTXORPEN:pProc=NotXorPen;break;
	case R2_ALPHAPEN:pProc=AlphaPen;break;
	case R2_ALPHABLEND:pProc=AlphaBlend;break;
	case R2_ALPHABLENDPEN:pProc=AlphaBlendPen;break;
	case R2_GETCOLORINDEX:pProc=GetColorIndex;break;
	case R2_GETCOLOR1:pProc=GetColor1;break;
	case R2_GETCOLOR4:pProc=GetColor4;break;
	case R2_GETCOLOR8:pProc=GetColor8;break;
	case R2_GETCOLOR16:pProc=GetColor16;break;
	case R2_GETCOLOR24:pProc=GetColor24;break;
	case R2_SETPENCOLOR:pProc=SetPenColor;break;
	case R2_COPYPALETTE:pProc=CopyPalette;break;
	default:
		pProc=RpNone;break;
	}
	return pProc;
}


//8位ROP渲染
void CROP8::CopyPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p=BYTE(rp.c);
}
void CROP8::XorPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p^=BYTE(rp.c);
}
void CROP8::AndPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p&=BYTE(rp.c);
}
void CROP8::AndNotPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p&=BYTE(~rp.c);
}
void CROP8::AndPenNot(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p=~(*p)&BYTE(rp.c);
}
void CROP8::OrPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p|=BYTE(rp.c);
}
void CROP8::OrNotPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p|=BYTE(~rp.c);
}
void CROP8::OrPenNot(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p=~*p|BYTE(rp.c);
}
void CROP8::NotCopyPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p=BYTE(~rp.c);
}
void CROP8::NotAndPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p&=BYTE(rp.c);*p=~*p;
}
void CROP8::NotOrPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p|=BYTE(rp.c);*p=~*p;
}
void CROP8::NotXorPen(CROP &rp)
{
	PBYTE p=PBYTE(rp.p);
	*p^=BYTE(rp.c);*p=~*p;
}
void CROP8::AlphaPen(CROP &rp)
{
	DWORD r,g,b,c=*PBYTE(rp.p),a=rp.a;
	r=c>>5;r=(r<<5)|(r<<2)|(r>>1);
	r*=a;r+=rp.r;r>>=13;r<<=5;
	g=c<<27;g>>=29;g=(g<<5)|(g<<2)|(g>>1);
	g*=a;g+=rp.g;g>>=13;g<<=2;
	b=c&3;b|=b<<2;b|=b<<2;
	b*=a;b+=rp.b;b>>=14;
	*PBYTE(rp.p)=BYTE(r|g|b);
}
void CROP8::AlphaBlend(CROP &rp)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -