2015-10-19 4 views
0

У меня возник вопрос об обертке объекта Halide :: Image вокруг уже выделенного массива C++, который определяет двумерное изображение с плавающей запятой двойной точности.Создайте объект Halide :: Image из существующего двойного массива C++

Я уже смотрел на:

C++ array to Halide Image (and back)

Это близко к тому, что я хочу сделать, но я смущен uint8_t типа принимающего члена buffer_t в галогениде и как вы работаете с существующими изображениями, которые не являются uint8_t.

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

Это не вариант для использования load_image, мне нужно работать с существующей уже выделенной памятью, определенной двойным *.

Image<uint16_t> input(6408, 4802); 

for (int y = 0; y < input.height(); y++) { 
    for (int x = 0; x < input.width(); x++) { 
     input(x, y) = rand() & 0xfff; 
    } 
} 

ответ

1

uint8_t* тип поля хоста buffer_t это просто указатель на любой массив данных. Вы можете указать его на массив float или double. Это в основном указатель void*, который интерпретируется по фактическому коду трубопровода. Его интерпретация определяется комбинацией программы Halide, которая загружается из нее, и поле elem_size (которое должно быть, например, sizeof(double) или sizeof(float) для данных с плавающей точкой разных видов).