2016-04-01 10 views
0

Ich muss eine Farbe eines Pixels an einem Punkt in einem Bild zu lesen und den Code Ich habe funktioniert im Simulator für alle iPhones (einschließlich iPhone 6 Plus) mit Ausnahme von iPhone 6.Farbe des Pixels ist falsch nur für iPhone 6 Simulator

Ich weiß nicht warum, aber ich denke, der Index des Pixels ist nicht korrekt, da er eine Farbe an einem falschen Ort erkennt. Ich freue mich über jede Hilfe. Dies ist der Code, den ich habe.

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

Geben Sie die Werte "point.y" und "point.x" für die funktionierenden und nicht arbeitenden Geräte an. –

+0

Sind Sie sicher, dass Ihre Bilddaten auf allen Plattformen im richtigen Pixelformat codiert sind? Definieren Sie das Bildformat selbst oder sind Sie darauf angewiesen, dass das Betriebssystem eines für Sie auswählt? Im Allgemeinen sollten Sie sich nicht auf die Breite des Bildes verlassen, um Ihnen zu sagen, wie viele Bytes in jeder Zeile enthalten sind, da Bilddaten manchmal auch CGImageGetBytesPerRow verwenden. –

+0

Das Bild ist ein Schnappschuss des gesamten Bildschirms (Ich habe den Code in meinem Beitrag hinzugefügt) –

Antwort

0

Vielen Dank Scott Thompson.

Ich habe CGImageGetBytesPerRow anstelle der Bildbreite verwendet und jetzt funktioniert es. Der korrekte Code ist unten:

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]) 
Verwandte Themen