Bir maskeyi uygulayarak bir görüntüyü işleyen bir UIView alt sınıfım var. Maskenin tamamen şeffaf olduğu Geniş Renk Gamı ekranına (en yeni iPad Artıları) sahip olanlar hariç tüm cihazlarda (yalnızca iPad'de) mükemmel çalışır (kullanıcı görünümünde olmadığı gibi görünür). İlgili init/drawRect kod şuna benzer:CGImage maskesi, Geniş Renk Gamı ekranlarında çalışmıyor
init(image: UIImage) {
scratchable = image.cgImage!
imageWidth = scratchable.width
imageHeight = scratchable.height
let colorspace = CGColorSpaceCreateDeviceGray()
let pixels = CFDataCreateMutable(nil, imageWidth * imageHeight)!
alphaPixels = CGContext(
data: CFDataGetMutableBytePtr(pixels),
width: imageWidth,
height: imageHeight,
bitsPerComponent: 8,
bytesPerRow: imageWidth,
space: colorspace,
bitmapInfo: CGImageAlphaInfo.none.rawValue
)!
provider = CGDataProvider(data: pixels)!
alphaPixels.setFillColor(UIColor.black.cgColor)
let mask = CGImage(
maskWidth: imageWidth,
height: imageHeight,
bitsPerComponent: 8,
bitsPerPixel: 8,
bytesPerRow: imageWidth,
provider: provider,
decode: nil,
shouldInterpolate: false
)!
scratched = scratchable.masking(mask)!
super.init(frame: CGRect(x: 0, y: 0, width: imageWidth/2, height: imageHeight/2))
alphaPixels.fill(imageRect)
isOpaque = false
}
override func draw(_ rect: CGRect) {
let context = UIGraphicsGetCurrentContext()!
context.saveGState()
context.translateBy(x: 0, y: bounds.size.height)
context.scaleBy(x: 1.0, y: -1.0)
context.draw(scratched, in: rect)
context.restoreGState()
}
(vb bağlamda, nedeni pixels
, alphaPixels
için gerekli olan maske etkileyecek bağlam içine çekiyor sınıftaki diğer kod kaynaklanmaktadır).
Geniş renk gamı ekranının bu durumu neden etkilediği veya düzeltmek için neler yapılabileceği hakkında bir fikriniz var mı? Renk alanıyla ilgili bir şey olabileceğini düşündüm, ancak dokümanlar açıkça maskenin CGColorSpaceCreateDeviceGray
'u düzgün çalışması için kullanması gerektiğini açıkça belirtiyor (ki bu gerçekten doğrudur). http://d.pr/f/IS4SEF
Bu, iPhoneX'te bir sorun mu (geniş renk gamına sahip)? Simülatörlerde yeniden üretilebilir mi? – paiv
Doğru ve kötü sonuç görüntülerini bağlayabilir misiniz? – paiv
@paiv Bu sadece bir iPad uygulaması ve iPhone X'in de bulunmadığından emin değiliz. Çalışmayacağını farz ediyorum. Simülatörde, sadece cihazda çoğaltılamaz. Soruma bir örnek projeyle bağlantı kurdum. Herhangi bir yardım için teşekkürler! – pwightman