獲取作爲區域副本的新圖像。空白區域返回空指針 。如果內存分配失敗,則返回一個空指針 。調用者負責釋放返回的數組。複製圖像中的像素區域
該區域包括[left, right-1]
(包含)在內的所有列, 以及從[top, bottom-1]
(含)的所有行。
在任何情況下,您都可以假設left <= right
和top <= bottom
: 不需要爲此進行測試。
的區域的面積是(right-left) * (bottom-top)
像素,這 意味着如果left == right
或top == bottom
,該區域不具有 區域並且被定義爲「空」。每個功能都注意如何處理空白區域。
此解決方案在終端中引發了一個稱爲「內存損壞」的錯誤,它指向我的malloc函數調用,然後沿着0x00001dec880
的行輸入一個非常奇怪的數字,每次編譯時都會有所不同。我不知道這是爲什麼,並幫助將不勝感激
uint8_t* region_copy(const uint8_t array[], unsigned int cols, unsigned int rows,
unsigned int left, unsigned int top, unsigned int right, unsigned int bottom) {
unsigned int corner1 = left + (top*cols);
unsigned int corner2 = right + (bottom*cols);
unsigned int newsize = (right - left) * (bottom - top);
if(left==right || top == bottom) {
return NULL;
}
uint8_t* newimg = malloc(newsize * sizeof(uint8_t));
if(newimg == NULL){
return NULL;
}
memset(newimg, 0, newsize);
for(int i = corner1; i < corner2; i++) {
newimg[i] = array[i];
}
return newimg;
}