SRC: RGB-color to HTML-color string (2 способа)
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 23.08.02 07:24
Оценка: 30 (1)
Собственно, сабж. Если нужно перевести значение цвета, хранящееся в 4 байтах, в строку для представления цвета в формате HTML, то вот навскидку 2 способа (я сознательно не использовал многие зависящие от конкретных библиотек (MFC, VCL и пр.) функции типа IntToHex):

Сами функции (доработать по вкусу ):


//---------------------------------------------------------------------------

void print_html_color1(long color) {
    printf("#%02X%02X%02X",(BYTE)color, (BYTE) (((WORD)color) >> 8) ,(BYTE)(color >> 16) );
}

//---------------------------------------------------------------------------

void print_html_color2(long color) {

static char hexVals[]={ // hex-таблица
                       '0','1','2','3','4','5','6','7',
                       '8','9','A','B','C','D','E','F'
                       };

char cResultColor[8]={0}; // результирующее представление цвета в формате HTML
cResultColor[0] = '#';

  BYTE* pByte = (BYTE*) &color;

  for(int i=0;i<3;i++) {
    cResultColor[i*2+1] = hexVals[ (*pByte)/16 ];
    cResultColor[i*2+2] = hexVals[ (*pByte++)%16 ];
    }

 printf(cResultColor);
}

//---------------------------------------------------------------------------



Тестовая программка:

//---------------------------------------------------------------------------

int main(int argc, char **argv)
{

long sampleColorInRGB = RGB(0,125,255);

print_html_color1(sampleColorInRGB);
printf("\n");
print_html_color2(sampleColorInRGB);

getch();

return 0;

}

//---------------------------------------------------------------------------


Ну и, как обычно, все это дело компилировалось и тестировалось под BCB 1.0. Если будут замечания, предложения — сюда.

З.Ы. Про "доработать по вкусу" я не зря — как и обычно, "легким движением брюки превращаются... брюки превращаются..."

З.З.Ы. Если вдруг у кого трудности с подключением определения макроса RGB ( разве еще есть такие? ) , то вот и он:


#define RGB(r, g ,b)  ((DWORD) (((BYTE) (r) | \  
    ((WORD) (g) << 8)) | \ 
    (((DWORD) (BYTE) (b)) << 16)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.