Saya memiliki fungsi yang mengambil UIImage dan warna dan menggunakannya untuk mengembalikan UIImage hanya dalam warna itu.
Sebagai bagian dari fungsinya, UIImage diubah menjadi CGImage tetapi karena alasan tertentu ukuran CGImage adalah 3 kali lipat dari UIImage yang berarti hasil akhirnya adalah 3 kali dari ukuran yang seharusnya.
Inilah fungsinya
func coloredImageNamed(name: String, color: UIColor) -> UIImage {
let startImage: UIImage = UIImage(named: name)!
print("UIImage W: \(startImage.size.width) H\(startImage.size.height)")
let maskImage: CGImage = startImage.CGImage!
print("CGImage W: \(CGImageGetWidth(maskImage)) H\(CGImageGetHeight(maskImage))")
// Make the image that the mask is applied to (Just a rectangle of the color want to use)
let colorImageSize: CGSize = CGSizeMake(startImage.size.width, startImage.size.height)
let colorFillImage: CGImage = getImageWithColor(color, size: colorImageSize).CGImage!
// Make the mask image into a mask
let mask: CGImage = CGImageMaskCreate(CGImageGetWidth(maskImage),
CGImageGetHeight(maskImage),
CGImageGetBitsPerComponent(maskImage),
CGImageGetBitsPerPixel(maskImage),
CGImageGetBytesPerRow(maskImage),
CGImageGetDataProvider(maskImage), nil, false)!
// Create the new image and convert back to UIImage, then return
let masked: CGImage! = CGImageCreateWithMask(colorFillImage, mask);
let returnImage: UIImage! = UIImage(CGImage: masked)
return returnImage
}
Anda dapat melihat di beberapa baris pertama saya menggunakan print() untuk mencetak ukuran masing-masing UIImage dan CGImage ke konsol. CGIimage selalu berukuran 3 kali lipat dari UIImage... Saya curiga ini ada hubungannya dengan @2x, @3x dll?
Jadi pertanyaannya adalah mengapa ini terjadi dan apa yang bisa dilakukan untuk mendapatkan Gambar yang ukurannya sama dengan yang saya mulai?