1
有没有一种最快的方式来将Allegro 5.0.x中的IplImage类型从OpenCV转换为ALLEGRO_BITMAP类型,而不是将每个像素从一个转换为另一个?如何将IplImage(OpenCV)快速转换为ALLEGRO_BITMAP(A5)?
像2这样的循环:
void iplImageToBitmap(IplImage *source, ALLEGRO_BITMAP* dest) {
if(source!= NULL && dest!= NULL) {
al_set_target_bitmap(dest);
int height = source->height;
int width = source->width;
int x,y;
for(y=0; y < height ; y++) {
uchar* ptr = (uchar*) (
source->imageData + y * source->widthStep
);
for(x=0; x < width; x++) {
al_put_pixel(x,y,al_map_rgb(ptr[3*x+2],ptr[3*x+1],ptr[3*x]));
}
}
}
}
好吧,它运行得更好,但它是唯一的方法吗?它是因为这里的位图结构无法访问?这足够快吗?我不知道OpenCV可以执行这样的事情有多快。 – Merovigiam
@Merovigiam:这些是Allegro提供的工具。 Allegro用于每帧更新图像。如果您想在此获得最佳性能,那么您需要比Allegro允许的级别更低。 –
@Merovigiam,如果你以与源相同的格式来锁定位图,那么你可以一行一行地“memcpy”。如果这些行的宽度相同(即跨度或间距)并且是连续的,那么您也可以一次使用'memcpy'对整个事物进行处理。 – Matthew