Comment utiliserais-je des graphismes de base que pour générer un fond de texture de bruit? Je suis bloqué sur la partie de bruit car il n'ya aucun moyen d'ajouter un filtre de bruit dans les graphiques de base ... p>
3 Réponses :
Créez un PNG de bruit, puis tirez-le à l'aide d'un mélange de superposition.
// draw background CGContextFillRect(context, ...) // blend noise on top CGContextSetBlendMode(context, kCGBlendModeOverlay); CGImageRef cgImage = [UIImage imageNamed:@"noise"].CGImage; CGContextDrawImage(context, rect, cgImage); CGContextSetBlendMode(context, kCGBlendModeNormal);
Par Pure Core Graphics, je voulais aussi dessiner le bruit dans les graphismes principaux ... L'exigence de mon application est qu'elle n'utilise aucun fichier PNG, malheureusement.
C'est une exigence étrange. Je pouvais voir l'indépendance de la résolution comme la raison, mais il suffit d'utiliser deux résolution différentes résolver cela.
Néanmoins, cela fonctionnerait ... Y a-t-il un moyen d'encoder l'uiimage en tant que données de texte que je pouvais ramener d'une classe personnalisée? EDIT: Je ne serais pas capable de créer une classe wrapper personnalisée avec une piqode codée de base64 de l'image en format de rétine et écrivez quelques méthodes simples pour renvoyer l'image dans une taille / format?
alors simplement générer i> le CGIMAGE, plutôt que d'utiliser une ressource PNG
Environ un an plus tard, j'ai trouvé la réponse:
CGImageRef CGGenerateNoiseImage(CGSize size, CGFloat factor) CF_RETURNS_RETAINED { NSUInteger bits = fabs(size.width) * fabs(size.height); char *rgba = (char *)malloc(bits); srand(124); for(int i = 0; i < bits; ++i) rgba[i] = (rand() % 256) * factor; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef bitmapContext = CGBitmapContextCreate(rgba, fabs(size.width), fabs(size.height), 8, fabs(size.width), colorSpace, kCGImageAlphaNone); CGImageRef image = CGBitmapContextCreateImage(bitmapContext); CFRelease(bitmapContext); CGColorSpaceRelease(colorSpace); free(rgba); return image; }
Notez que l'image renvoyée à partir de cette fonction contient un nombre de retenue +1 et doit être libérée à l'aide de Cfrelease (image) après avoir terminé la dessin. Sinon, il fuit. De plus, le nom de la fonction doit être modifié pour refléter ceci. Il devrait contenir «nouveau» ou «créer» quelque part.
Merci! Corrigé avec cf_returns_rettenue code>.
Il y a un cirandomenerator dans CoreImageFilters < / a> à partir de iOS 6.
Mais gardez à l'esprit que celui-ci n'est pas un bruit gaussien (comme il n'est pas dans la réponse précédente).