2017-10-27 14 views
0

私はARGB生の配列からUIImageを作成しようとしています。RGBA配列をUIImageに変換すると間違った結果が発生する

まず、640x480ピクセル(307200)の配列を作成し、すべて赤に設定します。

var rgbArray = [Int?](repeating: nil, count: 307200) 
for i in 0 ..< 307200 { 
    rgbArray[i] = 0x00ff0000 // Red pixel 
} 

次に画像変換:画像は青の代わりに赤、またその奇妙であること

enter image description here

注:

let data = UnsafeMutablePointer(mutating: rgbArray) 

let releaseMaskImagePixelData: CGDataProviderReleaseDataCallback = { (info: UnsafeMutableRawPointer?, data: UnsafeRawPointer, size: Int) ->() in 
    return 
} 

let provider: CGDataProvider! = CGDataProvider(dataInfo: nil, data: data, size: 307200, releaseData: releaseMaskImagePixelData) 

let cgImage = CGImage(
    width: 640, 
    height: 480, 
    bitsPerComponent: 8, 
    bitsPerPixel: 32, 
    bytesPerRow: 2560, 
    space: CGColorSpaceCreateDeviceRGB(), 
    bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.noneSkipLast.rawValue), 
    provider: provider, 
    decode: nil, 
    shouldInterpolate: true, 
    intent: .defaultIntent 
) 

let uiImage = UIImage(cgImage: cgImage!) 

結果、このような画像であります垂直線。

私は間違っていますか?

+0

リアルタイムで '[Int](繰返し:0x00ff0000、カウント:307200)'配列をリアルタイムで作成するにはArrayの繰り返し初期化子を使用することができます –

+0

btw赤色ピクセルhexaのUIColorは '0xffff0000' –

答えて

0

私は自分自身に答える。

それは私がそれをオプションにしていない場合、それは例えば、正常に動作します、なぜならrgbArrayの種類(中間?)であった:

var rgbArray = [Int](repeating: 0xffff0000, count: 307200) 

私はまだこの奇妙な振る舞いを理解するが、ですることはできません少なくとも私はそれを働かせました。

関連する問題