Я использую библиотеку под названием Awesomium, и она имеет следующую функцию:
void Awesomium::BitmapSurface::CopyTo ( unsigned char * dest_buffer, // output
int dest_row_span, // input that I can select
int dest_depth, // input that I can select
bool convert_to_rgba, // input that I can select
bool flip_y // input that I can select
) const
Copy this bitmap to a certain destination. Will also set the dirty bit to False.
Parameters
dest_buffer A pointer to the destination pixel buffer.
dest_row_span The number of bytes per-row of the destination.
dest_depth The depth (number of bytes per pixel, is usually 4 for BGRA surfaces and 3 for BGR surfaces).
convert_to_rgba Whether or not we should convert BGRA to RGBA.
flip_y Whether or not we should invert the bitmap vertically.
Это здорово, потому что это дает мне unsigned char * dest_buffer
который содержит необработанные растровые данные. Я несколько часов пытался преобразовать эти необработанные растровые данные в какой-то пригодный для использования формат, который я могу использовать в SDL, но у меня возникли проблемы. = [Есть ли способ, которым я могу загрузить его в текстуру или поверхность SDL? Было бы идеально иметь примеры для обоих, но если я получу только один пример (текстуру или поверхность), этого будет достаточно, и я буду очень благодарен. 🙂 Я пытался использовать SDL_LoadBMP_RW, но это не помогло. Я даже не уверен, должен ли я использовать этот метод.
SDL_LoadBMP_RW
для загрузки изображения в формате файла BMP. И это ожидает SDL_RWops*
, который является файловым потоком, а не пиксельным буфером. Функция, которую вы хотите SDL_CreateRGBSurfaceFrom. Я считаю, что этот вызов должен работать для ваших целей:
SDL_Surface* surface =
SDL_CreateRGBSurfaceFrom(
pixels, // dest_buffer from CopyTo
width, // in pixels
height, // in pixels
depth, // in bits, so should be dest_depth * 8
pitch, // dest_row_span from CopyTo
Rmask, // RGBA masks, see docs
Gmask,
Bmask,
Amask
);