2009-09-07 4 views
0

Je suis en train d'écrire une image sur une couche en utilisant Quartz, mais tout ce que je vois est des images totalement vide ... c'est le codeavec UIGraphicsGetCurrentContext

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGRect backRect = CGRectMake (0, 0, image.size.width, image.size.height); 

CGLayerRef backLayer = CGLayerCreateWithContext (context, image.size, NULL); 
CGContextRef backContext = CGLayerGetContext (backLayer); 

CGContextDrawImage(backContext, backRect, image.CGImage); 

pouvez-vous les gars s'il vous plaît me dire ce qui est faux avec ce code?

L'image est une image UII prise avec l'appareil photo.

Oui, l'image est là. Si je remplace le code ci-dessus par

UIGraphicsBeginImageContext(image.size); 
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

Je vois l'image. Mais je dois l'avoir dans une couche, car c'est un sprite. Etes-vous sûr que les images ont été trouvées au bon endroit?

Répondre

1

Vous n'êtes pas vraiment faire quelque chose avec la couche que vous avez créé. Vous devez l'ajouter au contexte actuel à l'aide CGContextDrawLayerAtPoint() ou CGContextDrawLayerInRect() ou ...

Vous pouvez ajouter ce qui suit:

CGContextDrawLayerInRect(context, backRect, backLayer); 

ou

CGContextDrawLayerAtPoint(context,CGPointZero,backLayer); 
+0

qu'en est-il de la ligne CGContextDrawImage (backContext, backRect, image.CGImage) ;? N'est-ce pas dessiner la couche sur le contexte? – SpaceDog

+0

Non, vous dessinez l'image sur le nouveau calque que vous avez créé, mais le calque lui-même doit être ajouté au contexte actuel. –

+0

ah, d'accord. J'ai ajouté la ligne \t CGContextDrawLayerAtPoint (context, CGPointMake (0,0), backLayer); à la fin du code mais je reçois encore des images vides ... tous mes cheveux deviennent gris au désespoir ... – SpaceDog

0
  • Etes-vous sûr que les images ont été trouvées au bon endroit?
  • Le format de l'image et les numéros de couleur sont-ils pris en charge par cet iphone?
  • Les images ne sont pas mises à découvert par d'autres appels de dessin?
  • Dans le pire des cas, une fuite de mémoire non détectée a causé les images à la mémoire écrasées
+0

tout est là. Si je précède ce code avec les lignes UIGraphicsBeginImageContext (image.size); [image drawInRect: CGRectMake (0, 0, image.size.width, image.size.height)]; l'image est dessinée correctement. – SpaceDog

1

Soyez conscient qu'un CGLayer est différent d'un CALayer. Un CALayer est ce qui peut être animé par Core Animation, où un CGLayer est juste une commodité pour assembler un dessin Core Graphics 2-D statique. Parce que vous faites référence à cela comme un sprite, je suppose que vous aurez envie d'animer cela, donc CALayer serait le meilleur choix. Je recommande de lire le Core Animation Programming Guide, en particulier le section on providing layer content. CALayers vous donnera de très bonnes performances en animation, car elles sont accélérées par GPU et n'ont pas besoin d'être redessinées à chaque image. Core Graphics ne vous offrira aucune performance acceptable pour l'animation, car les redraws sont des opérations coûteuses.

Questions connexes