Wie würde ich Core-Grafiken verwenden, um einen Hintergrund mit Rauschtexturen zu erzeugen? Ich bin auf das Rauschen Teil stecken, weil es keine Möglichkeit, einen Rauschfilter in Core Graphics hinzufügen...
Antworten
Zu viele Anzeigen?Etwa ein Jahr später habe ich die Antwort gefunden:
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;
}
Dadurch wird ein Rauschbild erzeugt, das garantiert zufällig ist und mit dem Code aus Jason Harwigs Antwort gezeichnet werden kann.
Jason Harwig
Punkte
40107
Erstellen Sie ein Rausch-Png und zeichnen Sie es dann mit einer Überlagerungsmischung.
// draw background
CGContextFillRect(context, ...)
// blend noise on top
CGContextSetBlendMode(context, kCGBlendModeOverlay);
CGImageRef cgImage = [UIImage imageNamed:@"noise"].CGImage;
CGContextDrawImage(context, rect, cgImage);
CGContextSetBlendMode(context, kCGBlendModeNormal);
Jürgen Schwietering
Punkte
430
Es gibt einen CIRandomGenerator in CoreImageFilters ab iOS 6. Aber bedenken Sie, dass es sich hierbei nicht um gaußsches Rauschen handelt (wie auch nicht in der vorherigen Antwort).
- (UIImage*)linearRandomImage:(CGRect)rect
{
CIContext *randomContext = [CIContext contextWithOptions:nil];
CIFilter *randomGenerator = [CIFilter filterWithName: @"CIColorMonochrome"];
[randomGenerator setValue:[[CIFilter filterWithName:@"CIRandomGenerator"] valueForKey:@"outputImage"] forKey:@"inputImage"];
[randomGenerator setDefaults];
CIImage *resultImage = [randomGenerator outputImage];
CGImageRef ref = [randomContext createCGImage:resultImage fromRect:rect];
UIImage *endImage=[UIImage imageWithCGImage:ref];
return endImage;
}