2014-12-05 5 views
1

настоящее время я использую этот подход, чтобы скопировать некоторые значения байтов в течение:C++ указатель на оптимизацию массива байт

for (int i = 0; i < (iLen + 1); i++) 
    { 
     *(pBuffer + i) = Image.pVid[i]; 
    } 

Я хотел бы спросить, есть ли способ, чтобы скопировать эти значения более чем на одном дыхании, возможно, используя memcopy для увеличения скорости.

Весь код:

extern "C" __declspec(dllexport) int __stdcall GetCameraImage(BYTE pBuffer[], int Type, int uWidth, int uHeight) 
{ 
    CameraImage Image; 

    int ret; 

    Image.pVid = (unsigned int*)malloc(4 * uWidth*uHeight); 
    ret = stGetCameraImage(&Image, 1, uWidth, uHeight); 
    if (ret == ERR_SUCCESS) 
    { 
     int iLen = (4 * uWidth * uHeight); 

     for (int i = 0; i < (iLen + 1); i++) 
     { 
      *(pBuffer + i) = Image.pVid[i]; 
     } 

     ////print(“ImageType = %d, width = %d, height = %d”, Image.Type, Image.Width, 
     //// Image.Height); 
     ////print(“First Pixel : B = %d, G = %d, R = %d”, Image.pVid[0], Image.pVid[1], 
     //// Image.pVid[2]); 
     ////print(“Second Pixel : B = %d, G = %d, R = %d”, Image.pVid[4], Image.pVid[5], 
     //// Image.pVid[6]); 
    } 

    free(Image.pVid); 

    return ret; 
} 

Edit:
* идентификатору это:

unsigned int *pVid;    // pointer to image data (Format RGB32...) 
+2

Вы уверены, что 'i <(iLen + 1);'? –

+0

Не уверен в этом. Должно ли быть i tmighty

+0

Немного непонятно: вы хотите скопировать байт? Другими словами, каков размер pBuffer: такое же количество элементов, что и в изображении, или такое же количество байтов? –

ответ

1

Путь ваш код в настоящее время написано, каждое задание в цикле будет переполнение и даст вам некоторое количество мусора в pBuffer, потому что вы пытаетесь присвоить unsigned intBYTE. Кроме того, вы будете бежать конец Image.pVid массива, поскольку i рассчитывает байт, а не unsigned int s

Вы можете исправить свой код, делая это:

*(pBuffer + i) = ((BYTE*)Image.pVid)[i]; 

Но это довольно неэффективно. Лучше всего перемещать целые слова за раз, или вы могли бы просто использовать memcpy вместо:

memcpy(pBuffer,Image.pVid,iLen) //pBuffer must be at least iLen bytes long 
Смежные вопросы