¹Ø¼ü´Ê µ÷É«°å Windows ͼÏñ´¦Àí
ÔÚĿǰµÄ´ó¶àÊý΢»úÖж¼ÅäÖÃÁ˸ßÐÔÄܵÄTVGA»òSVGAͼÐο¨,ÔÚÕâЩͼÐο¨ÖÐ,ºì¡¢ÂÌ¡¢À¶ÈýԪɫ¸÷Õ¼Áùλ,ÑÕÉ«×ÜÊýÕ¼18λ,¹Ê¿ÉÒÔÏÔʾ262144ÖÖÑÕÉ«,ÔÚ¸ü¸ß¼¶µÄͼÐο¨ÖÐ,ÉõÖÁ¿É´ï24λµÄÕæ²ÊÉ«¡£Ê¹Óõ÷É«°å¼¼Êõ,¿ÉÒÔÔÚÒ»¸ö´°¿ÚÏÔʾ256ÖÖÑÕÉ«,ÿһ¸±Í¼Ïñ¶¼¾ßÓжÀÁ¢µÄ256¸öµ÷É«°å,ÏÔʾʱ¸ü»»µ÷É«°å±ã¿ÉÂú×ã¸÷·ùͼÏñµÄÑÕɫҪÇó¡£
È»¶ø,ÔÚijЩӦÓÃÖÐÔòÒªÇóͬһ´°¿ÚÖÐÏÔʾÁ½·ùÉõÖÁ¸ü¶àµÄ²ÊɫͼÏñ,Èç¹û°´ÕÕ³£¹æÉè¼Æ,´°¿ÚÖÐÖ»ÄÜÕýÈ·µØÏÔʾÆäÖÐÒ»·ùͼÏñ,¶øÆäËüµÄͼÏñÔòÓÉÓÚÆäµ÷É«°å±»¸ü»»,ÑÕÉ«¾Í»á»ìÂÒ¡£ÔÚÎÒÃÇ¿ª·¢¶àýÌå²éѯϵͳ¡ª¡ªÉ½¶«Ê¡ÂÃÓÎ×ÊÔ´²éѯ×Óϵͳʱ,ϵͳҪÇóÒÔÒ»·ùɽ¶«Ê¡²ÊÉ«µØÍ¼Îª±³¾°,È»ºóÔÚ¸÷¸öÂÃÓξ°µãÉèÖÃÒ»¸ö´¥Ãþ°´Å¥,µ±Óû§´¥Ãþ¸Ã°´Å¥Ê±,ÔÚ´°¿ÚµÄÓÒϲ¿·ÖÏÔʾ¸Ã¾°µãµÄ²ÊɫͼÏñ¡£Èç¹ûͼÏñ²»¾¹ýÌØÊâ´¦Àí,ÔòÔÚÏÔʾ¸Ã¾°µãµÄ²ÊɫͼÏñµÄͬʱҲ¸ü»»Á˸ô°¿ÚµÄµ÷É«°å,ʹ±³¾°Í¼ÏñµÄÑÕÉ«Ê§Õæ¡£ÎªÁ˽â¾öÕâ¸öÎÊÌâ,ÎÒÃǶÔͼÏñ×öÁËÌØÊâ´¦Àí,ʹ±³¾°Í¼ÏñºÍ¸÷¸ö¾°µãͼÏñµÄµ÷É«°å²»·¢Éú³åÍ»¡£Í¬Ê±»¹Òª¿¼Âǵ½WindowsÕ¼ÓÃÁËǰ20¸öµ÷É«°å,ÔÚÒ»°ãÇé¿öϲ»ÔÊÐí¸ü¸Ä¡£¸ù¾ÝϵͳµÄʵ¼ÊÇé¿ö,ÎÒÃǶԵ÷É«°å×öÁËÈçϲ¼ÖÃ:µÚ0¡«19ºÅµ÷É«°åΪWindowsϵͳ±£Áô;µÚ20¡«148ºÅµ÷É«°åΪ±³¾°Í¼ÏñʹÓÃ,Ò»µ©±³¾°Í¼ÏñʹÓúó,¾Í²»ÔÙ¸ü¸Ä;µÚ149¡«255ºÅµ÷É«°åΪ¸÷¾°µãͼÏñʹÓÃ,µ±ÏÔʾ²»Í¬µÄ¾°µãͼÏñʱ,ËæÊ±¸ü¸ÄÕâЩµ÷É«°å¡£¶¨ÒåÒ»¸öPALETTEENTRYÀàÐ͵ÄÊý×épalette[256]ÓÃÀ´±£´æ¸÷ÑÕÉ«·ÖÁ¿¡£¸ÃÀàÐÍÊÇWindows¶¨ÒåµÄÒ»Öֽṹ:
typedef struct {
BYTE peRed;
/*µ÷É«°åÏîµÄºìÉ«±¥ºÍ¶È*/
BYTE peGreen;/*µ÷É«°åÏîµÄÂÌÉ«±¥ºÍ¶È*/
BYTE peBlue;
/*µ÷É«°åÏîµÄÀ¶É«±¥ºÍ¶È*/
BYTE peFlags;/*NULL¡¢PC-EXPLICIT¡¢PC-NOCOLLAPSEÒ»°ãÈ¡PC-EXPLICIT*/
} PALETTEENTRY;
ÕâÑù°Ñ±³¾°Í¼ÏñµÄµÚ20¡«148ºÅµ÷É«°åºÍ¾°µãͼÏñµÄµÚ149¡«255ºÅµ÷É«°å·Ö±ð·ÅÈëpal
ette[20]¡«palette[255]ÖÐ,È»ºó°´ÏÂÁв½ÖèʵÏָõ÷É«°å¡£
1.¶¨ÒåHDC hdc; HPALETTE w-hp; LOGPALETTE *pal;
2.¸øpal¸³Öµ
pal=(NPLOGPALETTE)LocalAlloc(LMEM-FIXED,
sizeof(LOGPALETTE)+256*sizeof(PALETTEENTRY));
pal->palVersion=0X300;/*
pal->palNumEntries=256;
memcpy(%pal->palPalEntry[0],&palette[0],
256*sizeof(PALETTEENTRY);
3.ʵÏָõ÷É«°å
hdc=GetDC(hWnd);
w-hp=CreatePalette((LPLOGPALETTE)pal);
w-hp=SelectPalette(hdc,w-hp,0);
RealizePalette(hdc);
LocalFree(HANDLE)pal);
ÆäÖÐhWndΪҪÏÔʾͼÏñµÄ´°¿Ú¾ä±ú¡£°´ÉÏÊö²½ÖèʵÏָõ÷É«°åºó,¶ÁÈëÒªÏÔʾµÄͼÏñ,È»ºóÓ³Éäµ½hdcÖм´¿É¡£
±¾ÎÄÌṩµÄ³ÌÐòcpcolor.c¿ÉÒÔʵÏÖ°ÑÒ»¸öBMP¸ñʽµÄͼÏñ´Ó256ɫѹËõ³É(color2-color1+1)É«,²¢°ÑÑÕÉ«ºÅÏÞÖÆÔÚcolor1µ½color2·¶Î§ÄÚ¡£³ÌÐòÖ´ÐиñʽΪ:
cpcolorͼÏñÎļþÃû ÑÕÉ«ÏÂÏÞ ÑÕÉ«ÉÏÏÞ±¾³ÌÐòʹÓÃ×îÓÅ»¯·½·¨,ʹÓÃЧ¹ûÁ¼ºÃ¡£
/* Ô´³ÌÐòcpcolor.c */
#include <stdio.h>
#include <math.h>
#include <alloc.h>
unsigned char palette[256][4];
long TAB[256];
unsigned char TT[256],BB[256];
int width,depth,bytes;
/* ¸Ãº¯Êý´ò¿ªÍ¼ÏñÎļþ²¢¶ÁͼÏñµÄ¿í¡¢¸ßºÍ¸÷µ÷É«°åµÄÑÕÉ«·ÖÁ¿,²¢°ÑÎļþÖ¸ÕëÖ¸ÏòͼÏñµÄ¿ªÊ¼´¦*/
FILE *get-bitmap-file(char*fname)
{
unsigned char ch;
int i,j,n;
FILE *fp;
fp=fopen(fname,"rb+");
if (fp==NULL) return NULL;
fseek(fp,18L,SEEK-SET);
fread(&width,2,1,fp);fseek(fp,2L,SEEK-CUR);
fread(&depth,2,1,fp);fseek(fp,2L,SEEK-CUR);
n=width/4;
if (width%4 !=0) n++;
bytes=n*4;
fseek(fp,54L,SEEK-SET);
fread(&palette[0][0],4,256,fp);
return fp;
}
/*¸Ãº¯ÊýʵÏÖÑÕÉ«µÄѹËõ*/
void zh_fan-tu(FILE *fp,int color1,int color2)
{
unsigned char *p,*q,cc,ch;
long len;
int max-no, i,j,m,n,r0,b0,g0,r1,b1,g1;
double dd,dmin;
char s[4];
max-no=color2-color1+1;
for (i=0;i<256;i++) TAB[i]=0;
p=(char *)malloc(bytes+1);
for (i=0;i<depth;i++) {
fread(p,bytes,1,fp);
q=p;
for (j=0;j<bytes;j++,q++) if(j>=width) break;
else {
ch=(unsigned char)*q;
TAB[ch]++;
}
}
for (i=0;i<256;i++) tt[i]=(unsigned char)i;
for (i=0;i<255;i++) for (j=i+1;j<256;j++)
if (TAB[i]<TAB[j]){
len=TAB[i];TAB[i]=TAB[Õª Òª ¸ÃÎÄÂÛÊöÁËÔÚWindowsͬһ´°¿ÚÖÐÏÔʾ¶à·ù²ÊɫͼÏñµÄ¼¼ÊõºÍʵÏÖ·½·¨,²¢Ìṩ×îÓÅ»¯³ÌÐòѹËõÔͼÏñµÄÑÕÉ«ÊýÁ¿¡£
¹Ø¼ü´Ê µ÷É«°å Windows ͼÏñ´¦Àí
ÔÚĿǰµÄ´ó¶àÊý΢»úÖж¼ÅäÖÃÁ˸ßÐÔÄܵÄTVGA»òSVGAͼÐο¨,ÔÚÕâЩͼÐο¨ÖÐ,ºì¡¢ÂÌ¡¢À¶ÈýԪɫ¸÷Õ¼Áùλ,ÑÕÉ«×ÜÊýÕ¼18λ,¹Ê¿ÉÒÔÏÔʾ262144ÖÖÑÕÉ«,ÔÚ¸ü¸ß¼¶µÄͼÐο¨ÖÐ,ÉõÖÁ¿É´ï24λµÄÕæ²ÊÉ«¡£Ê¹Óõ÷É«°å¼¼Êõ,¿ÉÒÔÔÚÒ»¸ö´°¿ÚÏÔʾ256ÖÖÑÕÉ«,ÿһ¸±Í¼Ïñ¶¼¾ßÓжÀÁ¢µÄ256¸öµ÷É«°å,ÏÔʾʱ¸ü»»µ÷É«°å±ã¿ÉÂú×ã¸÷·ùͼÏñµÄÑÕɫҪÇó¡£