Przedstawiam Wam kod napisany w jezyku C# chciałbym ten sam kod przekształcić do formy odpowiadajęcej językowi C, Muszę dokonać kilka konwersji i z tym wiążą się moje pytania.
Kod w języku C#:
Kod: Zaznacz cały
for (var n2 = 0; n2 < WIDTH; ++n2)
{
for (var n3 = HEIGHT - 1; n3 >= 0; --n3)
{
if (!sp.IsOpen)
return;
var byte1 = sp.ReadByte();
var blue = byte1;
var green = byte1;
var red = byte1;
MyBitmap.SetPixel(n2, n3, Color.FromArgb(1, red, green, blue));
}
}
Kod w języku C:
Kod: Zaznacz cały
#define RGB2COLOR(r, g, b) ((((r>>3)<<11) | ((g>>2)<<5) | (b>>3)))
#define HEIGHT 320
#define WIDTH 240
int C;
for(uint16_t n2 = 0; n2 < WIDTH; ++n2)
{
for (uint16_t n3 = 0; n3 < HEIGHT; ++n3) // Zmiana kierunku kreślenia
{
while(!((C = uart3_get_char())>= 0)); Czekaj aż pojawi się nowa wartość >= 0
uint8_t blue = (uint8_t)C;
uint8_t green = (uint8_t)C;
uint8_t red = (uint8_t)C;
SPFD5408_draw_pixel(n2, n3, RGB2COLOR(red, green, blue)); // Mój wyświetlacz używa standardu RGB565
}
}
Czy Waszym zdaniem to jest równoznaczne ?
Mam wątpliwości z tym zapisem Color.FromArgb(1, red, green, blue). Czy dobrze rozumiem, że ta metoda zwraca kolor 32 bitowy w standardzie ARGB8888 ? gdzie składową A mogę pominąć ?
Pytam ponieważ bitmapa na wyświetlaczu zupełnie nie przypomina tego co na komputerze na aplikacji w C# ?
Pragnę zaznaczyć, że odbieram bitmapę czarno białą w standardzie yuv422. Tym bardziej sposób konwersji tego do posta RGB jest moim zdaniem dziwny patrząc nawet na kod w C#