2015-05-07 2 views
0

Итак, я пытаюсь получить данные jpg-изображения, хранящиеся в памяти компьютера, но я могу получить только начальный адрес данных и размер данных. Указатель на начало данных - uint8_t *, а размер данных - uint32_t.Доступ к изображению в памяти, указанному начальному адресу и размеру

Используя fwrite, я могу записать данные в файл jpg и отобразить его правильно, поэтому я знаю, что данные верны и существуют. Как я могу непосредственно сохранить данные изображения jpg в переменной? В конечном счете, я хочу сохранить его в opencv Mat тоже.

Я не уверен, какой код показывать, поэтому, если вы хотите увидеть определенную его часть, просто спросите.

+0

Если у вас есть указатель на него, он уже хранится в переменной. –

ответ

1

Как об этом:

uint8_t *JPEG; 
JPEG = malloc(sizeof(uint8_t) * size_var); 
if(JPEG) { 
    memcpy(JPEG, your_pointer, size_var); 
} 

Однако, вы уже есть данные в переменной, так как у вас уже есть указатель на него. :)

Если вы хотите по-настоящему представить себе, что вы можете построить struct, который правильно отформатировал заголовок JPEG, а затем придумает необработанную память в структуру, чтобы лучше ее манипулировать.

+1

malloc в C++? как насчет нового или даже сочного вектора? – Creris

+0

Эй! OP - это тот, кто сначала столкнулся с указателем uint8_t !!! :) –

+1

не дает вам основания использовать malloc, вы можете новый uint8_t просто отлично – Creris

1

Если у вас есть переменная типа uint8_t *, которая содержит указатель на нее, вы можете получить к ней доступ точно так же, как массив.

uint8_t* my_pointer; 
int my_len; 

for (int i = 0; i < my_len; ++i) 
    cout << "The value of byte " << i 
     << " of the data is " << my_pointer[i] << endl; 
2

Знаете ли вы разрешение изображения? если да

хранить его в OpenCV Мат вы можете сделать

cv::Mat buf = cv::Mat(height, width, CV_8U, buff_ptr); 
cv::Mat img = cv::imdecode(buf, CV_LOAD_IMAGE_COLOR); 
Смежные вопросы