J'essaie de générer une image RGBA8 du texte à utiliser en tant que texture OpenGL ES 2.0. Malheureusement, il n'y a pas de CGColorsPacecreateDevicegba code> et
CGColorsPacecreateDeDeDevicergB Code> Résultats dans l'erreur suivante: P>
CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 448 bytes/row.
3 Réponses :
L'espace de couleur que vous spécifiez lors de la création ne provoquerait pas une erreur comme celle-là.
La raison pour laquelle vous obtenez cette erreur est que vous avez spécifié 8 bits par composant, probablement 4 composants de couleur dans le [modifier ] Pardon. J'aurais dû dire donc, quelque chose comme ceci: p> 4 * Taille.Width Code> Valeur Vous avez transmis pour
BYTESPERROW CODE>, mais un
bitmapInfo code> Paramètre de
KCGIMAGELPHANONE code>.
kcgimagealphanone code> signifie uniquement
rgb code>, pas
rgba code>. Si vous voulez
rgba code>, vous devez spécifier probablement spécifier
kcgimagealphalast code> s>
kcgimagealphapremultipliedlast code>. P>
kcgimagealpropremultipliedlast code>, pas
kcgimaquealphalast code>. P>
J'avais essayé aussi; Malheureusement, je reçois la même erreur (ISH): "CGBITMAPCONTExtCreate: Combinaison de paramètres non pris en charge: 8 bits integer / composant; 32 bits / pixels; espace couleur à 3 composants; kcgimagealphalast; 448 octets / rangées."
J'ai mis à jour la question à montrer que l'erreur survient toujours avec KCGIMAGEALPHALAST.
@Ian Terrell: Yup, désolé, je me suis trompé; Consultez ma réponse mise à jour avec kcgimagealphapremultipliedlast code> plutôt que
kcgimagealphalast code>.
Cela corrige l'erreur; Mon uiimage a été encore créé de manière incorrecte, mais j'ai résolu que Via IMAGE = [UIIMAGE ImageWithCGIMAGE: CGBITMAPCONTExtCreateImage (Contextref)]. Merci!
Apple Docs disent que KCGIMAGEALPHAXX est soutenu depuis 2,0, mais seulement KCGIMACEALPHAPREMULTIPLIEXXXX semble fonctionner.
Je suis désolé, mais selon le SDK, le dernier paramètre sur la cgbitmapcontextCreate doit être un CGBITMAPInfo, pas une constante CGIMAGELPHA. développeur.apple.com/library/ios/documentation/graphicsimagin g / ...
@ROBVanderveer: A cgbitmapinfo code> comprend un
cgimaalphanfo code> dans le cadre du masque. De ( développeur.apple.com/library/ios/documentation/graphicsimagi ng / ... ):" Les constantes de spécification des informations sur les canaux alpha sont déclarées avec le type
cgimaSealphainfo code> mais peut être transmis à ce paramètre en toute sécurité. Vous pouvez également transmettre les autres constantes associées au type
cgbitmapinfo code>. "
Je reçois la même combinaison de paramètres non prise en charge code> Erreur même si j'utilisais - Modifier en réponse au commentaire de Steven - P>
Le problème avec l'alimentation dans une largeur fractionnée, car le deuxième argument n'est pas que kcgimagealphapremultipliedlast code>. Le problème dans mon cas s'est avéré être que la largeur que j'avais eu était fractionnelle. Le transformant en un entier en passant
int (largeur) code> à cgbitmapcontextcreate a résolu le problème. P>
cgbitmapcontextexcreate code> interprète comme tel - comme indiqué, il est fondé implicitement au type d'entier non signé de l'argument. Au contraire, il produit une divergence dans l'argument
bytes_per_row code>, car int (largeur * 4) n'est pas la même que INT (largeur) * 4. E. G. Si la largeur est 22,5, la largeur est tronquée à 22, mais
largeur * 4 code> calcule à 90, pas 88. p>
Impossible, l'argument de largeur à cgbitmapcontextexcreate code> est déjà un entier (non signé). Le casting est fait pour vous.
La note a signalé une observation, donc il n'est pas impossible de définir, car elle s'est produite. Cela dit, mon analyse était incomplète. J'ai édité ma réponse et précisé pourquoi utiliser une largeur fractionnée est un problème.
C'est vrai, je me suis mis en question les observations / mesures. Merci de clarifier. Au fait, si vous utilisez NULL pour l'argument de données comme l'OP, vous passez également 0 pour les octets par ligne afin que le système puisse choisir une valeur correcte (et peut encore plus performante).
CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little; CGContextRef theContext = CGBitmapContextCreate(NULL, imgSize.width, imgSize.height, 8, 4*imgSize.width, colorSpace, bitmapInfo);