крайслер
03.12.2012, 13:13
Результат:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
void Grad_Box(int x, int y, int h, int w, DWORD Color_1, DWORD Color_2,LPDIRECT3DDEVICE9 pDevice)
{
float aPer,rPer,gPer,bPer;
DWORD Colorit;
DWORD a_1 = (Color_1>>24)&0xFF;
DWORD r_1 = (Color_1>>16)&0xFF;
DWORD g_1 = (Color_1>>8) &0xFF;
DWORD b_1 = Color_1 &0xFF;
DWORD a_2 = (Color_2>>24)&0xFF;
DWORD r_2 = (Color_2>>16)&0xFF;
DWORD g_2 = (Color_2>>8) &0xFF;
DWORD b_2 = Color_2 &0xFF;
aPer = ((float)a_2-(float)a_1)/h;
rPer = ((float)r_2-(float)r_1)/h;
gPer = ((float)g_2-(int) g_1)/h;
bPer = ((float)b_2-(float)b_1)/h;
for(int i = 0;i<h;i++){
Colorit = (a_1+(int)(aPer*i) << 24)
| (r_1+(int)(rPer*i) << 16)
| (g_1+(int)(gPer*i) << 8)
| (b_1+(int)(bPer*i));
DrawBox(x,y+i,w,1,Colorit, pDevice);
}
}
Используем так:
Grad_Box(X, Y, Ширина, Высота, Верхний_Цвет,Нижний_Цвет,pDevice);
Чтобы заливать по горизонтальному направлению
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
изменяем код на это:
aPer = ((float)a_2-(float)a_1)/w;
rPer = ((float)r_2-(float)r_1)/w;
gPer = ((float)g_2-(int)g_1)/w;
bPer = ((float)b_2-(float)b_1)/w;
for(int i = 0;i<w;i++){
Colorit = (a_1+(int)(aPer*i) << 24)
| (r_1+(int)(rPer*i) << 16)
| (g_1+(int)(gPer*i) << 8)
| (b_1+(int)(bPer*i));
DrawBox(x+i,y,1,h,Colorit, pDevice);
}
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
void Grad_Box(int x, int y, int h, int w, DWORD Color_1, DWORD Color_2,LPDIRECT3DDEVICE9 pDevice)
{
float aPer,rPer,gPer,bPer;
DWORD Colorit;
DWORD a_1 = (Color_1>>24)&0xFF;
DWORD r_1 = (Color_1>>16)&0xFF;
DWORD g_1 = (Color_1>>8) &0xFF;
DWORD b_1 = Color_1 &0xFF;
DWORD a_2 = (Color_2>>24)&0xFF;
DWORD r_2 = (Color_2>>16)&0xFF;
DWORD g_2 = (Color_2>>8) &0xFF;
DWORD b_2 = Color_2 &0xFF;
aPer = ((float)a_2-(float)a_1)/h;
rPer = ((float)r_2-(float)r_1)/h;
gPer = ((float)g_2-(int) g_1)/h;
bPer = ((float)b_2-(float)b_1)/h;
for(int i = 0;i<h;i++){
Colorit = (a_1+(int)(aPer*i) << 24)
| (r_1+(int)(rPer*i) << 16)
| (g_1+(int)(gPer*i) << 8)
| (b_1+(int)(bPer*i));
DrawBox(x,y+i,w,1,Colorit, pDevice);
}
}
Используем так:
Grad_Box(X, Y, Ширина, Высота, Верхний_Цвет,Нижний_Цвет,pDevice);
Чтобы заливать по горизонтальному направлению
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
изменяем код на это:
aPer = ((float)a_2-(float)a_1)/w;
rPer = ((float)r_2-(float)r_1)/w;
gPer = ((float)g_2-(int)g_1)/w;
bPer = ((float)b_2-(float)b_1)/w;
for(int i = 0;i<w;i++){
Colorit = (a_1+(int)(aPer*i) << 24)
| (r_1+(int)(rPer*i) << 16)
| (g_1+(int)(gPer*i) << 8)
| (b_1+(int)(bPer*i));
DrawBox(x+i,y,1,h,Colorit, pDevice);
}