Zdravím,
mám obrázek s 15-bit barevnou hloubkou a potřebuji ho dostat do 24-bit barevné hloubky. Tedy původní obrázek může mít pro např. červenou složku rozsah 0 - 31, kdyžto výsledný 0 - 255.
Jenže mě teď nějak nenapadá vzoreček, jak to udělat, aby se mi to rovnoměrně namapovalo .
Násobit to osmi je supr pro tmavý barvy, ale u světlejších to bude čím dál horší a nejbělejší bude 31 * 8 = 248, což má do bílé (255) docela daleko.
Když tak tady je kód, se kterým to lze testovat...
#include <iostream>
#include <cstdint>
using namespace std;
const uint16_t R_mask = 0x7c00;
const uint16_t G_mask = 0x03e0;
const uint16_t B_mask = 0x001f;
struct RGB {
uint8_t R, G, B;
RGB(uint16_t color) :
R((color & R_mask) >> 10),
G((color & G_mask) >> 5),
B(color & B_mask)
{ }
friend ostream & operator<<(ostream & out, const RGB & color) {
return out << (uint)color.R
<< ' ' << (uint)color.G
<< ' ' << (uint)color.B;
}
};
int main(void) {
cout << "Black: " << RGB(0x0000) << endl;
cout << "White: " << RGB(0x7fff) << endl;
cout << "Red: " << RGB(R_mask) << endl;
cout << "Green: " << RGB(G_mask) << endl;
cout << "Blue: " << RGB(B_mask) << endl;
}