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
が、運がありません。
PS私はこのコードを追加して、負を正に反転させました:
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)
}
}
これは機能しますが、もちろん、最初に画像を正しく取得したいと思います。
編集:私は愚かなことをしているに違いないと思います。上記のようにレンダリングして全体像を反転すると、次のようになります
左が Finder プレビュー、右が私のレンダリングです。今気づいたように、これは画像の一部を反転させます。@Tricertops コードを試してみたところ、得られました (上/下の黒いブロックは、他の PDF のリストからのものです)。
明らかに、これは適切なグレー値を持っていますが、画像の下にある黒いマスクがいくつかあります。左の純粋なテキストは見えなくなりましたが、画像は正しく表示されます。