【发布时间】:2015-11-11 06:43:13
【问题描述】:
我想使用 Core Graphics 来调整一些图像的大小,因为我有一个图像重的应用程序。我在下面使用这种方法:
func createContext(image: UIImage) -> UIImage? {
let cgImage = image.CGImage
let width = Int(image.size.width)
let height = Int(image.size.height)
let bitsPerComponent = CGImageGetBitsPerComponent(cgImage)
let bytesPerRow = CGImageGetBytesPerRow(cgImage)
let colorSpace = CGImageGetColorSpace(cgImage)
let bitmapInfo = CGImageGetBitmapInfo(cgImage)
let context = CGBitmapContextCreate(nil, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo.rawValue)
CGContextSetInterpolationQuality(context, .High)
CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: image.size.width, height: image.size.height)), cgImage)
let scaledImage = CGBitmapContextCreateImage(context).flatMap { UIImage(CGImage: $0) }
return scaledImage
}
返回的图像在横向图像上看起来很棒,但对于纵向图像,它看起来像这样:
我可以更改代码以引入 UIKit 元素:
func createContext(image: UIImage) -> UIImage? {
let cgImage = image.CGImage
let rect = CGRectMake(0, 0, image.size.width, image.size.height)
let size = image.size
let scale: CGFloat = 0.0
let width = CGImageGetWidth(cgImage) / 2
let height = CGImageGetHeight(cgImage) / 2
let bitsPerComponent = CGImageGetBitsPerComponent(cgImage)
let bytesPerRow = CGImageGetBytesPerRow(cgImage)
let colorSpace = CGImageGetColorSpace(cgImage)
let bitmapInfo = CGImageGetBitmapInfo(cgImage)
UIGraphicsBeginImageContextWithOptions(size, false, scale)
image.drawInRect(CGRect(origin: CGPointZero, size: size))
let context = CGBitmapContextCreate(nil, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo.rawValue)
CGContextSetInterpolationQuality(context, .High)
let myGeneratedImage = CGBitmapContextCreateImage(context)
CGContextDrawImage(context, rect, myGeneratedImage)
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
它看起来像这样,这就是我想要的。
但是,我想尽我所能避免引入 UIKit 并通过仅使用 Core Graphics 来保持代码较低级别,有人可以指出我做错了什么吗?如果您能看到我的错误,请随时用 objC 或 Swift 代码回复。
【问题讨论】:
标签: ios objective-c image swift core-graphics