當前正在嘗試將C用於之前在python(pypy)中完成的作業。我想我會嘗試寫在C(爲最佳速度),並使用ctypes溝通。開箱(r,g,b)原始像素緩衝區C
現在我想要做的是從位圖(bmp文件)中獲取像素緩衝區,將其發送到C函數,該函數將原始緩衝區轉換爲R,G,B值的平面數組並返回它以蟒蛇。但是當我嘗試將「緩衝區」轉換爲R,G,B值時,我陷入了困境。 在Python中,我會簡單地使用「結構」模塊:B,G,R = struct.unpack('<BBB', buffer[i:i+3])
我應該怎麼做在C相同?
的Python:
from bmplib import Bitmap
import ctypes
lib = ctypes.CDLL('_bitmap.dll')
bmp = Bitmap()
bmp.open('4x4.bmp')
buf = bmp._rawAsArray() #Returns a array.array() of char (raw pixel-data)
addr, count = buf.buffer_info()
lib.getData.argtypes = []
arr = ctypes.cast(addr, ctypes.POINTER(ctypes.c_char))
lib.getData(arr, count) #Does not return anything yet..
失敗Ç試圖轉換像素:
#include <stdio.h>
void getData(char *, const int);
void getData(char * array, const int length) {
int i = 0;
while(i < length) {
/* ----- Clearly wrong as i got some HUGE number----- */
printf("%d, ", ((int *) array)[i] << 8); //B
printf("%d, ", ((int *) array)[i+1] << 8); //G
printf("%d\n", ((int *) array)[i+2] << 8); //R
i += 3;
}
//return total;
}
你在'char * array'中有什麼?每個字節一個樣本? – leonbloy 2013-04-11 17:38:41
即使是這樣:@leonbloy,這是正確的。 – JHolta 2013-04-11 18:02:19