Пытаюсь раскодировать иксовые курсоры - всё удачно, даже анамируются :)
Но.
Вот как должен выглядеть курсор http://www.gamedev.ru/images/?id=3599,
а выглядит http://www.gamedev.ru/images/?id=3598, т.е. окрашенным как-то неправильно.
Вот функция раскодирования одной строки из файла:
...
struct RGB
{
unsigned char r, g, b;
};
struct RGBA
{
unsigned char r, g, b, a;
};
...
int fmt_read_scanline(fmt_info *finfo, RGBA *scan)
{
RGB rgb;
unsigned char a;
for(int i = 0;i < WIDTH_OF_CURSOR;i++)
{
fread(&a, sizeof(unsigned char), 1, fptr);
fread(&rgb, sizeof(RGB), 1, fptr);
memcpy(scan+i, &rgb, sizeof(RGB));
(scan+i)->a = a;
}
return SQERR_OK;
}
Считываю байты как и написано в документации - сначала байт альфа канала, потом RGB триплет. Так почему же в итоге курсор выглядит неверно ?
Ну так на беглый взгляд, читаем сначала альфа, то потом должны читать b, потом g, потом r. А в этой функции после альфа записываются три байта bgr в структуру RGB. Следовательно
rgb.r = b
rgb.g = g
rgb.b = r
Как видно, все через одно место (: