2016-04-01 27 views
0

Bir görüntüdeki bir noktada bulunan bir pikselin rengini ve iPhone 6 dışındaki tüm iPhone'larda (iPhone 6 Plus dahil) simülatörde çalıştığım kodu okumam gerekiyor.Pikselin rengi sadece iPhone 6 simülatörü için yanlış

Neden bilmiyorum, ama tahminim yanlış bir yerde bir renk algıladığından pikselin doğru olmadığıdır. Herhangi bir yardım için minnettarım. Bu, sahip olduğum kod.

UIGraphicsBeginImageContext(upperCaseView.frame.size) 
upperCaseView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
snapshotImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(snapshotImage.CGImage)) 
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData) 

let pixelInfo: Int = ((Int(snapshotImage.size.width) * Int(point.y)) + Int(point.x)) * 4 

print(data[pixelInfo]) 
print(data[pixelInfo+1]) 
print(data[pixelInfo+2]) 
+0

'point.y' ve çalışma ve çalışma dışı cihazlar için' point.x' değerleri sağlar. –

+0

Görüntü verilerinizin tüm platformlarda uygun piksel formatında kodlandığından emin misiniz? Görüntü formatını kendiniz mi tanımlıyorsunuz, yoksa sizin için bir tane seçmek için işletim sistemine güveniyor musunuz? Genel olarak, görüntü verilerinin bazen CGImageGetBytesPerRow kullanılmasını içerdiğinden, her satırda kaç bayt olduğunu göstermek için resmin genişliğine güvenmemeniz gerekir. –

+0

görüntü bütün ekranın anlık bir görüntüsünü ifade ediyor (kodum mesaja ekledim) –

cevap

0

Çok teşekkür ederim Scott Thompson.

Görüntü genişliği yerine CGImageGetBytesPerRow kullanıyorum ve şimdi çalışıyor. doğru kod aşağıdaki gibidir:

UIGraphicsBeginImageContext(upperCaseView.frame.size) 
    upperCaseView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    snapshotImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(snapshotImage.CGImage)) 
    let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData) 

    let bytesPerPixel = (CGImageGetBitsPerPixel(snapshotImage.CGImage)/8) 
    let bytesPerRow = CGImageGetBytesPerRow(snapshotImage.CGImage) 
    let pixelInfo: Int = (bytesPerRow * Int(point.y)) + (Int(point.x) * bytesPerPixel) 

    print(data[pixelInfo]) 
    print(data[pixelInfo+1]) 
    print(data[pixelInfo+2]) 
İlgili konular