我有任意大小的图像缓冲区,我以 x,y 偏移量将其复制到相同大小或更大的缓冲区中。颜色空间是 BGRA。我目前的复制方法是:
void render(guint8* src, guint8* dest, uint src_width, uint src_height, uint dest_x, uint dest_y, uint dest_buffer_width) {
bool use_single_memcpy = (dest_x == 0) && (dest_y == 0) && (dest_buffer_width == src_width);
if(use_single_memcpy) {
memcpy(dest, src, src_width * src_height * 4);
}
else {
dest += (dest_y * dest_buffer_width * 4);
for(uint i=0;i < src_height;i++) {
memcpy(dest + (dest_x * 4), src, src_width * 4);
dest += dest_buffer_width * 4;
src += src_width * 4;
}
}
}
它运行得很快,但我很好奇是否可以做任何事情来改进它并获得额外的几毫秒。如果它涉及到汇编代码,我宁愿避免这种情况,但我愿意添加额外的库。