如何在flutter macos应用程序中使用CGContext,NSImage提高图像质量?

时间:2021-04-26 07:03:19

标签: swift macos flutter dart plugins

我在 flutter macos 应用程序中工作。我使用 macos 插件。我使用 swift 从我从 flutter(应用程序级别)发送的字节转换插件中的图像。我使用 NSImage 获取 png 数据并用它来渲染图像. 我将该 png 数据转换为 Uint8List 并将其发送到颤振应用程序端。我可以正确加载图像。但图像质量不如预期。 插件代码(swift): 图片转换部分:

  private func getImageForPlugin(index: Int) -> FlutterStandardTypedData
    {
        if(self.document != nil)
            {
                let page = self.document!.page(at: Int(index))
                var pageRect = page!.getBoxRect(.mediaBox)
                let img = NSImage(size: pageRect.size, actions: { ctx in
                        let mediaBox = page!.getBoxRect(.mediaBox)
                        ctx.beginPage(mediaBox: &pageRect)
                        let transform = page!.getDrawingTransform(.mediaBox, rect: mediaBox, rotate: 0, preserveAspectRatio: true)
                        ctx.translateBy(x: 0.0, y: mediaBox.size.height)
                        ctx.scaleBy(x: 1, y: -1)
                        ctx.concatenate(transform)

                        ctx.drawPDFPage(page!)
                        ctx.endPage()
                    })
                let bytes = img.tiffRepresentation?.bitmap?.png
                return FlutterStandardTypedData(bytes: bytes!)
            }
        return FlutterStandardTypedData()
    }

我在上述插件代码中使用的 NSImage 扩展:

extension NSBitmapImageRep {
    var png: Data? {
        return representation(using: .png, properties: [:])
    }
}
extension Data {
    var bitmap: NSBitmapImageRep? {
        return NSBitmapImageRep(data: self)
    }
}
extension NSImage {
    convenience init(size: CGSize, actions: (CGContext) -> Void) {
        self.init(size: size)
        lockFocusFlipped(true)
        actions(NSGraphicsContext.current!.cgContext)
        unlockFocus()
    }
     var png: Data? { tiffRepresentation?.bitmap?.png }
}

这里的 self.document 是 CGPDFDocument。请给我任何提高图像质量的建议。

0 个答案:

没有答案
相关问题