ios - 如何编译vImage浮雕效果示例代码?

标签 ios objective-c accelerate-framework vimage

这是在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;
}

问题出在这里:内核变量似乎引用了三种不同的类型:
  • void *正式参数列表中的内核
  • 一个未定义的无符号int uint_8内核,作为一个新变量,可能会遮盖形式参数
  • 在调用vImageConvolve_ARGB8888时是一个const签名的int * kernel常量。

  • 这是实际的代码吗?如何编译此函数?

    最佳答案

    您是正确的,该功能搞砸了。我建议使用“提供反馈”小部件让Apple知道。

    我认为您应该从函数签名中删除kernelkernel_widthkernel_height参数。那些似乎是应用调用者提供的内核的函数的保留,但是此示例是关于应用内部定义的内核的。

    修复了kernel局部变量的声明,使其成为uint8_t数组,如下所示:

        uint8_t kernel[] = {-2, -2, 0, -2, 6, 0, 0, 0, 0}; // 1
    

    然后,在对vImageConvolve_ARGB8888()的调用中,将kernel_widthkernel_height替换为3。由于内核是硬编码的,因此尺寸也可以。

    关于ios - 如何编译vImage浮雕效果示例代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18811662/

    相关文章:

    ios - 如何获取系统 UITableVIewCell 的详细标签的文本颜色?

    ios AVSpeechSynthesizer 插件 phonegap pauseSpeakingAtBoundary 不工作

    ios - Objective-c:编写私有(private)方法,被覆盖的可能性很小

    ios - 当我尝试从字典中删除值时,它抛出错误 "Index out of range"

    ios - 通知 iVar 值变化

    objective-c - 如何将核心数据添加到现有的基于选项卡的 IOS 项目

    c++ - 如何在 Windows 中复制加速(苹果 DSP 库)功能?

    iOS - 使用 Accelerate.framework 计算矩阵每一行和/或列的点积

    c++ - 不稳定的分析时间

    ios - 使用 iOS 的 Google Analytics,数据不发送