显然DirectDraw是Windows下写2D图形
![](/icons/35410chengxu.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410hanshu.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou2.gif)
由于我是业余时间写
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410jiajia.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou2.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou2.gif)
作为第
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410yinwei.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
C = C2*Alpha + C1*(1-Alpha)
如果Alpha取0~32
![](/icons/35410dou.gif)
C = (C2*Alpha + C1*(1-Alpha))>>5
每个点由R,G,B 3个分量组成
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410cuowu.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou2.gif)
Intel有段很长
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou2.gif)
![](/icons/35410de.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou2.gif)
下面说我
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410hanshu.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410hanshu.gif)
![](/icons/35410de.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou2.gif)
![](/icons/35410yi.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou2.gif)
Alpha运算中每个点3个色素
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410de.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410yi.gif)
![](/icons/35410de.gif)
![](/icons/35410dou2.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410dou.gif)
![](/icons/35410yi.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410de.gif)
![](/icons/35410dou.gif)
![](/icons/35410dou2.gif)
代码相信大家很容易就看懂了,大家把汇编部分和自己
![](/icons/35410de.gif)
![](/icons/35410chengxu.gif)
![](/icons/35410yi.gif)
![](/icons/35410de.gif)
![](/icons/35410de.gif)
![](/icons/35410if.gif)
![](/icons/35410de.gif)
![](/icons/35410cuowu.gif)
下面是任意Alpha
![](/icons/35410de.gif)
BOOL
CAresMaterial::DrawAlpha( LONG X, LONG Y, LPRECT pRect, BYTE Alpha )
{
unsigned __
![](/icons/35410int.gif)
unsigned __
![](/icons/35410int.gif)
unsigned __
![](/icons/35410int.gif)
unsigned __
![](/icons/35410int.gif)
RECT Rect;
A = Alpha & 0x1F;
PA = 0x1F - A;
Width = (unsigned __
![](/icons/35410int.gif)
Height = (unsigned __
![](/icons/35410int.gif)
D1 = (m_Desc.dwPitch - Width + 1)<<1 ;
D2 = (m_Desc.pAres->GetScreenPitch
![](/icons/35410kh.gif)
SetRect( &Rect, X, Y, X+Width-1, Y+Height-1 );
m_Desc.pAres->BackToDILayer( &Rect );
pSrc = m_Desc.pData + pRect->top*m_Desc.dwPitch + pRect->left;
pDest = m_Desc.pAres->GetDILayerData
![](/icons/35410kh.gif)
![](/icons/35410kh.gif)
__asm
{
mov esi,pSrc
mov edi,pDest
movd mm2,A
movd mm3,PA
mov cx,Height
shl ecx,16
mov cx,Width
LOOPA:
ror ecx,16
dec cx
jz DONE
ror ecx,16
LOOPB:
dec cx
jz NEXTLINE
//Process _disibledevent=>mov ax,[esi]
mov dx,ax
shl eax,16
mov ax,dx
and eax,0x7E0F81F
movd edx,mm2
mul edx
movd mm0,eax
mov ax,[edi]
mov dx,ax
shl eax,16
mov ax,dx
and eax,0x7E0F81F
movd edx,mm3
mul edx
movd mm1,eax
paddd mm0,mm1
psrlq mm0,5
movd eax,mm0
and eax,0x7E0F81F
mov edx,eax
shr edx,16
or eax,edx
mov [edi],ax
inc esi
inc edi
inc esi
inc edi
jmp LOOPB
NEXTLINE:
add esi,D1
add edi,D2
mov cx,Width
jmp LOOPA
DONE:
emms
}
m_Desc.pAres->DILayerToBack( &Rect );
![](/icons/35410return.gif)
}
下面是半透明Alpha
![](/icons/35410de.gif)
void
CAresMaterial::DrawAlpha1( LONG X, LONG Y, LPRECT pRect )
{
unsigned __
![](/icons/35410int.gif)
unsigned __
![](/icons/35410int.gif)
unsigned __
![](/icons/35410int.gif)
![](/icons/35410static.gif)
![](/icons/35410int.gif)
RECT Rect;
Width = (unsigned __
![](/icons/35410int.gif)
Height = (unsigned __
![](/icons/35410int.gif)
pSrc = m_Desc.pData + pRect->top*m_Desc.dwPitch + pRect->left;
pDest = m_Desc.pAres->GetBackData
![](/icons/35410kh.gif)
![](/icons/35410kh.gif)
DLeft = (Width % 4) + 1;
DW = (Width>>2) + 1;
D1 = (m_Desc.dwPitch - Width)<<1 ;
D2 = (m_Desc.pAres->GetScreenPitch
![](/icons/35410kh.gif)
SetRect( &Rect, X, Y, X+Width, Y+Height-1 );
__asm
{
mov esi,pSrc
mov edi,pDest
mov bx,DLeft
mov cx,Height
shl ecx,16
mov cx,DW
LOOPA:
ror ecx,16
dec cx
jz DONE
ror ecx,16
LOOPB:
dec cx
jz ENDLINE
//Process four po
![](/icons/35410int.gif)
最新评论