2016-04-01 8 views
0

画像内のあるポイントにあるピクセルの色を読み取る必要があり、コードはiPhone 6以外のすべてのiPhone(iPhone 6 Plusを含む)に対してシミュレータで動作します。ピクセルの色はiPhone 6シミュレータでのみ間違っています

なぜか分かりませんが、間違った場所の色が検出されたため、私の推測はピクセルのインデックスが正しくありません。 私は助けていただきありがとうございます。 これは私が持っているコードです。

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'と'加工用point.x'値と非作業装置を提供します。 –

+0

イメージデータがすべてのプラットフォームで適切なピクセル形式でエンコードされていることは確かですか?あなた自身でイメージフォーマットを定義しているのですか、またはオペレーティングシステムを使ってイメージフォーマットを選択していますか?一般に、画像データの幅がCGImageGetBytesPerRowの代わりに使用される場合があるため、各行にいくつのバイトがあるかを示すために画像の幅に頼るべきではありません。 –

+0

画像は画面全体のスナップショットです(私のポストにコードを追加しました) –

答えて

0

ありがとう、スコットトンプソン。

イメージ幅の代わりにCGImageGetBytesPerRowを使用しました。 正しいコードは以下である:

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]) 
関連する問題