如何从原始位图数据到 SDL 表面或纹理?
How to go from raw Bitmap data to SDL Surface or Texture?
我正在使用一个名为 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
);
我正在使用一个名为 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
);