256 还是 16色图形模式下的某点颜色值用getpixel获取就行
可是在64K色的图形模式下这种方法肯定是不行的
那用什么方法能获取呢?
最近才有时间弄这个~~
NEO里的那个我没弄明白!
我做了个程序,在没用NEO库下做的获取颜色,BZ看一下:
#include <dos.h>
#include <graphics.h>
typedef struct
{
unsigned char b;
unsigned char g;
unsigned char r;
}
rgb16M;
int huge Return_SVGA64K(void)
{
return(3);
}
void putpoint(int x, int y, rgb16M color)
{
setrgbpalette(1026, color.r >> 3, color.g >> 2, color.b >> 3);
putpixel(x, y, 0);
}
void init64k()
{
int gd=DETECT,gm=0;
installuserdriver("Svga64K", Return_SVGA64K);
initgraph(&gd, &gm, "");
}
main()
{
int x,y;
int page,get;
long addr;
rgb16M color;
int far *videoptr = (int far *)MK_FP(0xa000, 0);
init64k();
for(x=0;x<getmaxx();x++)
for(y=0;y<getmaxy();y++)
{
color.r=8;
color.g=3;
color.b=8;
putpoint(x,y,color);
}
x=123;
y=45;
page = (int)((addr = ((long)y + 0) * 640 + x) >> 15);
_BX = 0;
_DX =page;
_AX = 0x4f05;
__int__(0x10);
get=*(videoptr + (unsigned)(addr & 0xffff));
getch();
closegraph();
printf("%d",get);
getch();
}
好象的确获取了颜色值!
但是怎么把获取的那个颜色值转化回去啊?
怎么我改了好几个color值后获取的get值都是一样的?
例如:
color.r=1 把这个1改为0或者2~7 get都是0?
color.b=0
color.g=0