开发者社区> 问答> 正文

CGImage拆分错误:CGImageCreateWithImageProvider:无效的映像大小

我有一个扩展NSImage, cgImageSlice,它应该返回[CGImage]包含每个图像切片。在运行代码时,我会得到错误信息。CGImageCreateWithImageProvider: invalid image size: 0 x 0但是,在第18行的第一个循环之后,RECT的大小就不是这样了。这是为什么?

extension NSImage {
    var cgImage: CGImage? {
        var proposedRect = CGRect(origin: .zero, size: size)
        return cgImage(forProposedRect: &proposedRect, context: nil, hints: nil)
    }

    func sliceSize(axis: Axis, slices: Int) -> CGSize {
        CGSize(width: axis == .horizontal ? size.width : size.width / CGFloat(slices), height: axis == .vertical ? size.height : size.height / CGFloat(slices))
    }

    func cgImageSlice(axis: Axis, slices: Int, sliceSize size: CGSize? = nil) -> [CGImage] {
        let sliceSize = { () -> CGSize in
            size == nil ? self.sliceSize(axis: axis, slices: slices) : size!
        }()
        var cgImages = [CGImage]()
        for i in 0 ..< slices {
            let rect = CGRect(x: CGFloat(i) * sliceSize.width, y: CGFloat(i) * sliceSize.height, width: sliceSize.width, height: sliceSize.height)
            if let cgImage = cgImage?.cropping(to: rect) {
                cgImages.append(cgImage)
            }
        }
        return cgImages
    }

    func nsImageSlice(axis: Axis, slices: Int) -> [NSImage] {
        let sliceSize = self.sliceSize(axis: axis, slices: slices)
        var images = [NSImage]()
        for cgImage in cgImageSlice(axis: axis, slices: slices, sliceSize: sliceSize) {
            images.append(NSImage(cgImage: cgImage, size: sliceSize))
        }
        return images
    }

    enum Axis {
        case horizontal
        case vertical
    }
}

展开
收起
游客5akardh5cojhg 2019-12-16 21:20:53 606 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
面向失败设计 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载