質問を完全に理解したかどうかはわかりません。私の知る限り、次のようにpygameとサーフェスを初期化すると、pygameサーフェスはRGBA(正確にはBGRA)連続配列になります(各行の「32」に注意してください):
# display surface
DISP = pygame.display.set_mode((window_w, window_h), 0, 32)
# some surface
window = pygame.Surface((w, h), 0, 32)
また、24ビットサーフェスは配列と相互運用するのが難しいため、可能な場合は24ビットではなく32ビットを使用することをお勧めします(numpy
画像データの保存と操作に使用します)。
たとえば、私が間違っていなければ、24 ビットのサーフェスには 4 で割り切れるピクセルの量が必要です。
前述のように、あなたの最終的なタスクが何であるかはわかりませんが、これが私のやり方です。
たとえば、lib でイメージをロードし、openCV
BGRA 配列に変換します。
# BGR 3d numpy array array (shape = h, w, 3) with image data
img = cv2.imread(filename)
# BGRA 3d numpy array (shape = h, w, 4)
img = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
次に、この関数は配列データ全体をサーフェスにコピーします。ただし、それらが同じピクセル サイズであることを確認する必要があります。
# copy array data into a pygame surface
def copy_arr(surface, myarray):
bv = surface.get_buffer()
bv.write(myarray.tostring(), 0)
しかし、それはあなたが何か他のことをしたかったのかもしれません。