Hay,
Ich versuche mich gerade an ein bisschen Image Manipulation. Aktuell ein kleines Beispiel:
Alles anzeigen
Einfach ein ImageView welches das Bild ein bissl verärendert, jenachdem wie weit der Slider ist das Bild ein bisschen mehr sepia.
img.jpeg hat 2448 × 3264 pixel
Überraschen tut mich hier die Rechenzeit. Der kleine Benchmark sagt, dass es zwischen 2 und 6 Sekunden dauert.
Wie kann ich die Rechenzeit optimieren? Bekomm ich die Manipulation überhaupt live hin? Warum können die "anderen" das alle Live?
Ich versuche mich gerade an ein bisschen Image Manipulation. Aktuell ein kleines Beispiel:
Quellcode
-
- @implementation ViewController{
- CIContext *context;
- CIFilter *filter;
- CIImage *image;
- }
- @synthesize imgView;
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- NSString *filePath =
- [[NSBundle mainBundle] pathForResource:@"img" ofType:@"jpeg"];
- NSURL *fileNameAndPath = [NSURL fileURLWithPath:filePath];
- CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
- context = [CIContext contextWithOptions:nil];
- image = [CIImage imageWithContentsOfURL:fileNameAndPath];
- filter = [CIFilter filterWithName:@"CISepiaTone"];
- [filter setValue:image forKey:kCIInputImageKey];
- [filter setValue:@0.8f forKey:kCIInputIntensityKey];
- CIImage *result = [filter valueForKey:kCIOutputImageKey];
- imgView.image = [UIImage imageWithCIImage:result];
- CFAbsoluteTime interval = CFAbsoluteTimeGetCurrent() - start;
- NSLog(@"%.3fs", interval);
- }
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- - (IBAction)sliderChanged:(UISlider *)slider {
- CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
- float slideValue = slider.value;
- [filter setValue:@(slideValue)
- forKey:@"inputIntensity"];
- CIImage *outputImage = [filter outputImage];
- CGImageRef cgimg = [context createCGImage:outputImage
- fromRect:[outputImage extent]];
- UIImage *newImage = [UIImage imageWithCGImage:cgimg];
- self.imgView.image = newImage;
- CGImageRelease(cgimg);
- CFAbsoluteTime interval = CFAbsoluteTimeGetCurrent() - start;
- NSLog(@"%.3fs", interval);
- }
Einfach ein ImageView welches das Bild ein bissl verärendert, jenachdem wie weit der Slider ist das Bild ein bisschen mehr sepia.
img.jpeg hat 2448 × 3264 pixel
Überraschen tut mich hier die Rechenzeit. Der kleine Benchmark sagt, dass es zwischen 2 und 6 Sekunden dauert.
Wie kann ich die Rechenzeit optimieren? Bekomm ich die Manipulation überhaupt live hin? Warum können die "anderen" das alle Live?