我在 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。请给我任何提高图像质量的建议。