0

我有一个关于将 Halide::Image 对象包装在已分配的 C++ 数组周围的问题,该数组定义了二维双精度浮点图像。

我已经看过了:

C++ 数组到卤化物图像(和返回)

这与我想要做的很接近,但我对卤化物中 buffer_t 的主机成员的 uint8_t 类型以及如何处理不是 uint8_t 的现有图像感到困惑。

我看到在使用 aot 的模糊应用程序中,该示例分配了一个卤化物图像,然后将元素复制到这个卤化物图像中。我想这样做,但不支付副本费用。

使用 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;
    }
}
4

1 回答 1

1

uint8_t*主机字段的类型buffer_t只是指向任何数据数组的指针。您可以随意将其指向一个floatdouble数组。它基本上是一个void*被实际管道代码重新解释的指针。它的解释由从它加载的 Halide 程序和elem_size字段(应该是,例如,sizeof(double)sizeof(float)用于不同类型的浮点数据)的组合决定。

于 2015-10-19T23:29:18.580 回答