gpt4 book ai didi

swift - 将 PDF 转换为 CGImage 将图像转换为负片

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:21 24 4
gpt4 key购买 nike

我有以下代码将 PDF 页面转换为 CGImage:

func testPrint(pp:UnsafePointer<Void>) { // debug to see bits
var p = UnsafePointer<UInt8>(pp)
var res = ""
for _ in 0..<200 {
res += "\(p.memory) "
p = p.advancedBy(1)
}
print(res)
}

func pageOneFromPDF(file:String) -> CGImage? {
let url = NSURL(fileURLWithPath: file)
let pdfDocument = CGPDFDocumentCreateWithURL(url)
let pageOne = CGPDFDocumentGetPage(pdfDocument, 1)
let rect = CGPDFPageGetBoxRect(pageOne, .MediaBox)

let width = Int(rect.size.width)
let height = Int(rect.size.height)
let context = CGBitmapContextCreate(nil, width, height, 8, width, CGColorSpaceCreateDeviceGray(), CGImageAlphaInfo.Only.rawValue)!
CGContextClearRect(context, rect)
CGContextDrawPDFPage(context, pageOne)
testPrint(CGBitmapContextGetData(context))
return CGBitmapContextCreateImage(context)
}

这确实将我的 PDF 页面转换为灰度位图。唯一的问题是:生成的 CGImage 的颜色是反转的(黑色变成白色,反之亦然)。我摆弄了 CGBitmapContextCreate 的参数,但没有成功。

附言我添加了这段代码来将负数反转为正数:

func inverse(pp:UnsafePointer<Void>, size:Int) {
var p = UnsafeMutablePointer<UInt8>(pp)
for _ in 0..<size {
p.memory = 255-p.memory
p = p.advancedBy(1)
}
}

这行得通,但我当然希望首先获得正确的图像。

编辑:我想我一定是在做一些愚蠢的事情。当我像上面那样渲染并反转整个图片时,它看起来像

enter image description here

左边是 Finder 预览,右边是我的渲染。正如我现在注意到的,这会反转部分图像。我尝试使用@Tricertops 代码并得到(上方/下方的黑色 block 来自包含其他 PDF 的列表)

enter image description here

显然这具有正确的灰度值,但图片下方有一些黑色 mask 。左侧的纯文本现在不可见,但图像显示正确。

最佳答案

通过传递 CGImageAlphaInfo.Only,您要求的是 alpha 蒙版,而不是您可能认为的灰度图像。

首先,尝试使用 CGImageAlphaInfo.None 初始化上下文(因为 PDF 无论如何都没有 alpha):

CGBitmapContextCreate(nil, width, height, 8, width, CGColorSpaceCreateDeviceGray(), CGImageAlphaInfo.None.rawValue)

然后像 PDF 一样用白色填充上下文:

CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
CGContextFillRect(context, rect)

然后像以前一样继续绘制 PDF 页面。


我认为您得到的是 alpha 位图,而不是灰度图。没有绘制任何内容的零(并且 PDF 定义为白色)和绘制了一些内容的那些(因为它可能是黑色的)。它可以通过将位检查为倒置的灰色位图来显示。始终调试呈现的图像,而不是按位打印 :)

关于swift - 将 PDF 转换为 CGImage 将图像转换为负片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com