将RGB值数组渲染为像素在SDL 1.2中的实现方法?

5

我现在正在开发NES模拟器,但是我遇到了如何渲染像素的问题。我使用一个三维数组来保存每个像素的RGB值。对于256 x 224的屏幕大小,数组定义如下:

byte screenData[224][256][3];

例如,[0][0][0] 保存了像素在屏幕位置[0][0]处的蓝色值,[0][0][1] 保存了绿色值,[0][0][2] 保存了红色值。
当vblank标志变高时,需要渲染屏幕。当SDL开始渲染屏幕时,screenData数组将充满每个像素的RGB值。我找到了一个名为SDL_CreateRGBSurfaceFrom的函数,看起来可能适合我想做的事情。然而,我所见过的所有示例都使用一维数组来保存RGB值,而不是三维数组。
最好的方法是什么,可以让我渲染我的像素?如果该函数能够以某种方式调整表面大小,那就更好了,这样我就不必使用256 x 224的窗口大小。
2个回答

4
您需要将数据存储为一个一维的char数组
int channels = 3; // for a RGB image
char* pixels = new char[img_width * img_height * channels];

// populate pixels with real data ...

SDL_Surface *surface = SDL_CreateRGBSurfaceFrom((void*)pixels,
                img_width,
                img_height,
                channels * 8,          // bits per pixel = 24
                img_width * channels,  // pitch
                0x0000FF,              // red mask
                0x00FF00,              // green mask
                0xFF0000,              // blue mask
                0);                    // alpha mask (none)

1
我有一个窗口和一个表面,如何更新窗口以使用我拥有的表面?没有setSurface()或updateSurface()函数。 - Noobs DeSroobs

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接