这是在documentation中找到的代码:
int myEmboss(void *inData,
unsigned int inRowBytes,
void *outData,
unsigned int outRowBytes,
unsigned int height,
unsigned int width,
void *kernel,
unsigned int kernel_height,
unsigned int kernel_width,
int divisor ,
vImage_Flags flags ) {
uint_8 kernel = {-2, -2, 0, -2, 6, 0, 0, 0, 0}; // 1
vImage_Buffer src = { inData, height, width, inRowBytes }; // 2
vImage_Buffer dest = { outData, height, width, outRowBytes }; // 3
unsigned char bgColor[4] = { 0, 0, 0, 0 }; // 4
vImage_Error err; // 5
err = vImageConvolve_ARGB8888( &src, //const vImage_Buffer *src
&dest, //const vImage_Buffer *dest,
NULL,
0, //unsigned int srcOffsetToROI_X,
0, //unsigned int srcOffsetToROI_Y,
kernel, //const signed int *kernel,
kernel_height, //unsigned int
kernel_width, //unsigned int
divisor, //int
bgColor,
flags | kvImageBackgroundColorFill
//vImage_Flags flags
);
return err;
}
问题出在这里:内核变量似乎引用了三种不同的类型:
这是实际的代码吗?如何编译此函数?
最佳答案
您是正确的,该功能搞砸了。我建议使用“提供反馈”小部件让Apple知道。
我认为您应该从函数签名中删除kernel
,kernel_width
和kernel_height
参数。那些似乎是应用调用者提供的内核的函数的保留,但是此示例是关于应用内部定义的内核的。
修复了kernel
局部变量的声明,使其成为uint8_t
数组,如下所示:
uint8_t kernel[] = {-2, -2, 0, -2, 6, 0, 0, 0, 0}; // 1
然后,在对
vImageConvolve_ARGB8888()
的调用中,将kernel_width
和kernel_height
替换为3
。由于内核是硬编码的,因此尺寸也可以。
关于ios - 如何编译vImage浮雕效果示例代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18811662/