2016-03-11 1 views
0

Ce code fonctionne pour moi (Swift 2 aire de jeux) en échelle de gris, le chargement d'une image .BMP couleur ...Re: Obtenir des données de pixels sous forme de tableau de UIImage/CGImage dans rapide

Get pixel data as array from UIImage/CGImage in swift

.. . mais si je change bytesPerPixel-3 (ou 4) et utiliser

let colorSpace = CGColorSpaceCreateDeviceRGB() 

... le code fonctionne toujours sans erreur, mais les valeurs de pixels sont des zéros. Des suggestions sur la façon de résoudre ce problème?

+0

Peu importe ce que l'autre dit après. S'il vous plaît poster un lien vers l'image que vous démarrez et afficher en entier le code que _you_ utilise. – matt

Répondre

0

Vous avez probablement oublié le paramètre CGImageAlphaInfo. Pour les images couleur, si vous supposez que bytesPerPixel est 4, vous devez définir RGBA (ou ARGB) lors de la création du contexte. Voici un exemple pour RGBA sans le canal alpha.

// RGBA format 
let ctx = CGBitmapContextCreate(&data, pixelsWide, pixelsHigh, 8, 
    bitmapBytesPerRow, colorSpace, CGImageAlphaInfo.NoneSkipLast.rawValue) 

Selon la documentation, vous disposez des options suivantes:

enum CGImageAlphaInfo : UInt32 { 
    case None 
    case PremultipliedLast 
    case PremultipliedFirst 
    case Last 
    case First 
    case NoneSkipLast 
    case NoneSkipFirst 
    case Only 
} 
+0

Merci megakilo. Je savais que l'alpha était le problème et j'avais trouvé les paramètres, mais je n'avais pas conscience de la valeur cruciale! :-) –