Можно ли нарисовать растровое изображение Windows на поверхности Каира?

Я работаю в проекте, где Cairo был выбран в качестве графической библиотеки (работающей на Xlib) в среде OpenSUSE Linux. У меня очень мало опыта работы с графическими библиотеками или графическими форматами файлов, и мне было интересно, можно ли нарисовать растровое изображение Windows на поверхности Каира? Рисовать png в Каире довольно просто, но я везде искал информацию о рисовании растровых изображений и не мог ничего найти. Я собрал следующий код:

int height = 256;
int width = 256;
cairo_format_t format = CAIRO_FORMAT_RGB24;
int stride = cairo_format_stride_for_width (format, width);
unsigned char *bitmapData;
bitmapData = (unsigned char *)(malloc (stride * height));
std::ifstream myFile ("exampleBitmapImage.bmp", std::ios::in | std::ios::binary);
myFile.read ((char *)bitmapData, stride * height);

cairo_surface_t *imageSurface = cairo_image_surface_create_for_data (bitmapData, format, width, height, stride);
cairo_set_source_surface (cs, imageSurface, 0, 0);
cairo_paint (cs);
cairo_show_page (cs);
cairo_surface_destroy (imageSurface);

myFile.close();

Как ни странно, когда я запускаю это, он отображает изображение вверх ногами и назад в 1/64 от его размера 8 раз подряд, а затем заполняет то, что будет оставшейся частью размера изображения (оставшиеся 7/8 изображения ) с черным. Я подозреваю, что это как-то связано с форматом файла, и что я неправильно анализирую и передаю двоичные данные с неправильными настройками в Cairo. Кто-нибудь может дать руководство о том, как заставить это работать должным образом? Я прошу прощения за отсутствие знаний и хочу лучше понять эту проблему, и любая помощь очень ценится, спасибо! 🙂

2

Решение

Умножьте шаг на -1, который должен перевернуть ваше растровое изображение.
Посмотрите формат файла BMP http://en.wikipedia.org/wiki/BMP_file_format а также
реализовать синтаксический анализатор растровых заголовков и правильно установить кодировку.

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

1

Другие решения

Других решений пока нет …