RGBToWord

0

Jak zrobic konwersje trzech wartosci RGB na liczbe typu Word tak aby ta wartosc wykorzysac we funkcji ustawiajacej kolor tekstu na konsoli?

0

var kolor : TColor;

kolor := Image1.Canvas.Pixels[x, y];

r := GetRValue(kolor); //konwertowanie TColor na Byte
g := GetGValue(kolor); //konwertowanie TColor na Byte
b := GetBValue(kolor); //konwertowanie TColor na Byte

0

Ten kod da w wyniku 24 bity, a pytanie było o 16 bitów :)

0

Oto moja funkcja w C++
Wystarczy male zmiany zrobic i bedzie dobrze.

to jest przesuniecie bitowe w prawo
<< to jest przesuniecie bitowe w lewo
| - or
& and

WORD Graphics::RGB16(BYTE r, BYTE g, BYTE b)
{
// r = RRRR RRRR; g = GGGG GGGG; b = BBBB BBBB
WORD Red = (r >> 3); // 5 bitów = 3 bity w prawo = 000R RRRR
WORD Green = (g >> 2); // 6 bitów = 2 bity w prawo = 00GG GGGG
WORD Blue = (b >> 3); // 5 bitów = 3 bity w prawo = 000B BBBB
// Red = 0000 0000 000R RRRR
// Green = 0000 0000 00GG GGGG
// Blue = 0000 0000 000B BBBB
return (Red << 11) | (Green << 5) | Blue;
// Red = 11 bitów w lewo = RRRR R000 0000 0000
// Green = 5 bitów w lewo = 0000 0GGG GGG0 0000
// Blue = = 0000 0000 000B BBBB
// suma logiczna... OR
// wynik = RRRR RGGG GGGB BBBB
}

0

Napisałbym wcześniej, ale zapomniałem jak są rozłożone bity poszczególnych kolorów (dzięki za przypomnienie Piasiu).
Na pascala będzie to tak:

function RGB16(R, G, B: byte): word;
begin
result := ((R shr 3) shl 11) or ((G shr 2) shl 5) or (B shr 3);
end;

Chyba dobrze :-P

0

Dzieki wszystkim [hurra] [cya] [hurra]

1 użytkowników online, w tym zalogowanych: 0, gości: 1