У меня есть следующий фрагмент кода, чтобы преобразовать страницу PDF в CGImage:Преобразование 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
, но не повезло.
P.S. Я добавил этот кусок кода, чтобы полностью изменить отрицательного на положительный:
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)
}
}
, который работает, но, конечно, я хотел бы получить право изображения в первую очередь.
EDIT: Я, должно быть, делаю что-то глупое. Когда я сделать как выше и инвертировать всю картину, он выглядит как
, где оставил его искателя предварительный просмотр и право на рендеринге. Как я теперь заметил, это инвертирует части изображения. Я попытался с @Tricertops кодом и получил (черные блоки выше/ниже из списка с другими PDF-файлами)
и, очевидно, это имеет правильные значения серых, но есть некоторая черная маска, которая Подложка картина. Чистый текст слева теперь невидим, но изображения отображаются правильно.
Я пробовал это, но это все еще не похоже на смысл. Я добавил дополнительную информацию к моему вопросу. –
Я не знаю, что я сделал вчера, но, очевидно, я не сознавал (достаточно). На самом деле это то, чего мне не хватало. Большое спасибо! –