在TC2.0下,隸屬于16位子系統,是以int是2位元組,long是4位元組,char是1位元組。繪圖系統模式是VGA,顔色當然也很有限,是以讀取bmp像素後需要把像素顔色轉換為“最近”的已有VGA顔色。用int GetColor(int r,int g,int b)實作傳回一個顔色值(color code)。用putpixel(int x,int y,int color)繪制一個像素。
下圖是幾種在.NET Framework中的已知顔色和其RGB值(下圖當然也是使用代碼繪制的,代碼略)。

16種顔色是位于RGB立方體中的16個點,相當于尋找一個最接近指定顔色的點。為了簡化計算,計算出兩點距離的平方即可。
為了加快搜尋,我們可以用下面的類似繪制“金剛石”的代碼提前求出最短距離的平方,這個資料将應用到GetColor函數中。原因是我們已知最近的兩個顔色點的距離,如果某點與某顔色的距離小于最短距離的一半,則此顔色就是我們要找的結果。
Compute Minimum Dist^2 Code
int COLORS[16][3]={
.};
/* i,j - color index */
/* ret - distance^2 */
long GetDist(int i,int j)
{
long dist=0;
dist+=(COLORS[i][0]-COLORS[j][0])*(COLORS[i][0]-COLORS[j][0]);
dist+=(COLORS[i][1]-COLORS[j][1])*(COLORS[i][1]-COLORS[j][1]);
dist+=(COLORS[i][2]-COLORS[j][2])*(COLORS[i][2]-COLORS[j][2]);
return dist;
}
void main(void)
int i, j;
long dist,mindist=195075;
for(i=0;i<15;i++)
{
for(j=i+1;j<16;j++)
{
dist=GetDist(i,j);
if(dist<mindist)
mindist=dist;
}
}
printf("mindis^2=%d",mindist);