如何将LUT png用于CIColorCube滤镜?

2024-05-05

我想使用查找表 png (example http://nghiatran.me/wp-content/uploads/2014/06/FilterMe_Part2_ProcessedLUT.png)作为颜色立方体数据CIColorCubeSwift 中的过滤器。到目前为止,我尝试(和发现)的所有示例都是计算颜色立方体的示例,如下所示这个例子 https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_filer_recipes/ci_filter_recipes.html.

如何读取 png 作为查找数据?


我现在用的是this https://github.com/NghiaTranUIT/FeSlideFilter and this https://github.com/imgly/imgly-sdk-ios项目以适应 Swift 的 Objective-C 实现:

func colorCubeFilterFromLUT(imageName : NSString) -> CIFilter? {

    let kDimension : UInt = 64

    let lutImage    = UIImage(named: imageName)!.CGImage
    let lutWidth    = CGImageGetWidth(lutImage!)
    let lutHeight   = CGImageGetHeight(lutImage!)
    let rowCount    = lutHeight / kDimension
    let columnCount = lutWidth / kDimension

    if ((lutWidth % kDimension != 0) || (lutHeight % kDimension != 0) || (rowCount * columnCount != kDimension)) {

        NSLog("Invalid colorLUT %@", imageName);
        return nil
    }

    let bitmap  = self.createRGBABitmapFromImage(lutImage)
    let size    = Int(kDimension) * Int(kDimension) * Int(kDimension) * sizeof(Float) * 4
    let data    = UnsafeMutablePointer<Float>(malloc(UInt(size)))

    var bitmapOffset : Int = 0
    var z : UInt = 0


    for (var row: UInt = 0; row < rowCount; row++)
    {
        for (var y: UInt = 0; y < kDimension; y++)
        {
            var tmp = z
            for (var col: UInt = 0; col < columnCount; col++)
            {
                for (var x: UInt = 0; x < kDimension; x++) {

                    let alpha   = Float(bitmap[Int(bitmapOffset)]) / 255.0
                    let red     = Float(bitmap[Int(bitmapOffset+1)]) / 255.0
                    let green   = Float(bitmap[Int(bitmapOffset+2)]) / 255.0
                    let blue    = Float(bitmap[Int(bitmapOffset+3)]) / 255.0

                    var dataOffset = Int(z * kDimension * kDimension + y * kDimension + x) * 4

                    data[dataOffset] = red
                    data[dataOffset + 1] = green
                    data[dataOffset + 2] = blue
                    data[dataOffset + 3] = alpha
                    bitmapOffset += 4
                }
                z++
            }
            z = tmp
        }
        z += columnCount
    }

    let colorCubeData = NSData(bytesNoCopy: data, length: size, freeWhenDone: true)

    // create CIColorCube Filter
    var filter = CIFilter(name: "CIColorCube")
    filter.setValue(colorCubeData, forKey: "inputCubeData")
    filter.setValue(kDimension, forKey: "inputCubeDimension")

    return filter
}


func createRGBABitmapFromImage(inImage: CGImage) -> UnsafeMutablePointer<Float> {

    //Get image width, height
    let pixelsWide = CGImageGetWidth(inImage) 
    let pixelsHigh = CGImageGetHeight(inImage) 

    // Declare the number of bytes per row. Each pixel in the bitmap in this
    // example is represented by 4 bytes; 8 bits each of red, green, blue, and
    // alpha.
    let bitmapBytesPerRow = Int(pixelsWide) * 4 
    let bitmapByteCount = bitmapBytesPerRow * Int(pixelsHigh)

    // Use the generic RGB color space.
    let colorSpace = CGColorSpaceCreateDeviceRGB()

    // Allocate memory for image data. This is the destination in memory
    // where any drawing to the bitmap context will be rendered.
    let bitmapData = malloc(CUnsignedLong(bitmapByteCount)) // bitmap
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue) 

    // Create the bitmap context. We want pre-multiplied RGBA, 8-bits
    // per component. Regardless of what the source image format is
    // (CMYK, Grayscale, and so on) it will be converted over to the format
    // specified here by CGBitmapContextCreate.
    let context = CGBitmapContextCreate(bitmapData, pixelsWide, pixelsHigh, 8, UInt(bitmapBytesPerRow), colorSpace, bitmapInfo)


    let rect = CGRect(x:0, y:0, width:Int(pixelsWide), height:Int(pixelsHigh))        

    // Draw the image to the bitmap context. Once we draw, the memory
    // allocated for the context for rendering will then contain the
    // raw image data in the specified color space.
    CGContextDrawImage(context, rect, inImage)

    // Now we can get a pointer to the image data associated with the bitmap
    // context.
    // var data = CGBitmapContextGetData(context)
    // var dataType = UnsafeMutablePointer<Float>(data)
    // return dataType


    var convertedBitmap = malloc(UInt(bitmapByteCount * sizeof(Float)))
    vDSP_vfltu8(UnsafePointer<UInt8>(bitmapData), 1, UnsafeMutablePointer<Float>(convertedBitmap), 1, vDSP_Length(bitmapByteCount))

    free(bitmapData)
    return UnsafeMutablePointer<Float>(convertedBitmap)
}

另请参阅this https://stackoverflow.com/questions/24049313/how-do-i-load-and-edit-a-bitmap-file-at-the-pixel-level-in-swift-for-ios回答。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将LUT png用于CIColorCube滤镜? 的相关文章

  • 实例化 UISegementedControl 的子类时,对类使用未实现的初始化程序“init(frame:)”

    当我尝试使用以下实例时 出现以下错误MySegmentControl在下面的代码中 该错误发生在应用程序启动后 知道我错过了什么吗 致命错误 对类 TestingSubclassing MySegmentControl 使用未实现的初始化程
  • 使用 JavaScript 捕获 iPhone 虚拟键盘中的“完成”按钮点击

    我想知道是否有一种方法可以使用 JavaScript 捕获 iPhone 虚拟键盘的完成按钮事件 基本上 我只是希望能够在用户单击 完成 时调用 JS 函数 我无法跟踪单击的 完成 按钮 它没有注册任何clicks or keypresse
  • 当 TestFlight/IAP 总是给出“无连接”错误时,如何接受“Apple 媒体服务条款和条件”?

    我正在通过 TestFlight 测试带有应用内购买的应用程序 最近 当我尝试测试购买应用内购买时 开始出现提示 Apple Media Services 条款和条件已更改 随后总是出现错误 无连接 互联网连接工作正常 如何解决这种情况并恢
  • CIGaussianBlur 有时会改变图像方向

    在我的 iOS 应用程序中 我想在 UIImage 上应用一个滤镜 CIGaussianBlur 当它获得具有大高度的图像时 它会旋转图像 CIContext context CIContext contextWithOptions nil
  • 应用程序终止和设备重启后 PushKit 通知未到达

    借助 PushKit 我的 iOS 应用程序即使已关闭也能成功接收 VoIP 推送通知 失败时只有一个条件 如果我通过标准任务切换器刷出 终止 我的应用程序并重新启动我的设备 起初 我在重新启动设备后就遇到了这个问题 如这个问题所述 排除启
  • 如何在 ios 应用程序中将 .svg url 显示为图像

    我从服务器获取 svg 网址 如何在我的应用程序中将其显示为图像 我尝试在 UIWebView 中显示它 但无法调整内容图像的大小 我正在使用这个代码 let request NSURLRequest NSURLRequest url UR
  • 如何找到安全区域的高度和宽度?

    我正在尝试以编程方式为某些标签 按钮和文本字段设置相对于安全区域的高度和宽度的约束 例如 我希望将标签到安全区域顶部的距离设置为安全区域高度的 10 如何检索安全区域的高度和宽度 这是一个合理的方法吗 我的想法是 无论 iOS 设备如何 我
  • 通过 IOS Google Drive SDK 列出 Google Drive 的所有文件夹

    实际上我将 google drive sdk 与我的 ios 应用程序集成了 我可以通过适用于 iOS 的 google drive sdk 在 Google Drive 上上传指定文件 此外 我想提供一个功能 用于从可用文件夹中选择一个文
  • Facebook 登录 - 如果存在用户帐户(并且未安装应用程序)登录失败

    我刚刚在测试我的应用程序时发现了这个问题 它真的开始让我烦恼 那么环境是这样的 没有安装 Facebook 应用程序 用户登录 iOS 系统帐户 在设置 gt Facebook 下 当我的应用程序第一次尝试对用户进行身份验证时 它会提供这面
  • UIKeyboardFrameBeginUserInfoKey 和 UIKeyboardFrameEndUserInfoKey

    在管理键盘中文档 http developer apple com iphone library documentation StringsTextFonts Conceptual TextAndWebiPhoneOS KeyboardMa
  • iOS:自动调整大小不适用于 UIImageView

    我正在制作一个非常简单的应用程序来学习 Objective C 和 Xcode 该应用程序有一个 UIButton 和一个 UIImageView 当用户点击按钮时 图像从右到左以对角线运动向下移动 当它到达屏幕中的某个点时 它会重新生成以
  • 使用 AFNetworking 2.0 发布 JSON 数据

    我有一个 Web 脚本 它通过 HTTP POST 请求接受 JSON 字符串作为输入 我遇到过几个相同的 AFNetworking 1 x 示例 任何人都可以指出我或提供 AFNetworking 2 0 示例 以对使用格式化 JSON
  • 从 HealthKit 获取昨天的步数

    我正在构建一个供个人使用的应用程序 目前我正致力于如何从 healthkit 中准确获取昨天的步数 然后从那里将其放入变量中 我知道应该很容易 我有一个 HealthKitManager 类 它从视图内部调用该函数 然后将其附加到同一视图中
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • CIImage内存未释放

    我正在尝试拍摄一系列图像 混合当时的 X 图像并生成新图像 这是我必须完成此任务的代码 static func blendImages blendFrames Int blendMode CIImage BlendMode imagePat
  • 如何以编程方式伪造 UIButton 的触摸事件?

    我正在编写一些单元测试 并且由于这个特定应用程序的性质 重要的是我要达到尽可能高的水平UI链尽可能 因此 我想做的是以编程方式触发按钮按下 就好像用户按下了按钮一样GUI 是的 是的 我could只需致电IBAction选择器 但同样 这个
  • 在线和离线管理 iPhone 应用程序

    我被困在一个点上 我也在离线管理我的应用程序 第一次我从网络服务获取所有配置文件数据并将其路径存储到 sqlite 中时 我在更新这些数据时遇到问题 例如如果图像发生更改 我应该如何通知我的应用程序 我在 Google 上搜索了它 唯一的解
  • 无法在 Swift 的 Storyboard 中加载 UIViewController XIB 文件

    我读了使用 XCode 故事板实例化使用 XIB 进行设计的视图控制器 https stackoverflow com questions 9155719 using xcode storyboard to instantiate view
  • 以模态方式呈现 UIImagePickerController 时出错

    我有一个奇怪的问题UIImagePickerController在我的 iOS 6 应用程序中以模态方式显示 这XCode给我这个错误 Warning Attempt to present
  • 如何使用 XCode 7 在故事板中将视图高度设置为屏幕高度的百分比

    我需要设计如下图所示的视图 我尝试过固定高度 也尝试过紧凑宽度和常规高度以及常规宽度和紧凑高度 但这些场景对我不起作用 如何在故事板中将视图高度设置为屏幕高度的百分比 我正在使用 Xcode 7 Basically you need to

随机推荐