2016-05-22 16 views
0

AVCaptureSessionを使用してカメラの画像をビューのレイヤーにキャプチャするアプリケーションがあります。今度は、ユーザーエクスペリエンスを最適化するためにイメージの上の色が暗い色になっているときに、ステータスバーを白に変更したいと思っています。私は特定のピクセルから色を取得し、そのピクセルの色をテストすることを考えています。そのピクセルだけが別の色になる可能性があるので、それは良い考えではないと思います。では、イメージの上に表示される色に応じてステータスバーの色を変更する最も良い方法は何ですか?ビューのレイヤーの色に応じてステータスバーの色を変更する方法

+0

あなたはこのスニペットを試してみましたします。https:/ /gist.github.com/dhavaln/d28d026e1a427192f8af?これにより、色を抽出し、その変更に基づいてステータスバーの色を変更することができます。 – Thomas

答えて

0

はNO

にビューコントローラベースのステータスバーの外観を設定)アプリのInfo.plistファイルが

1ステップ 下に後藤の色と設定ステータスバーの色応じたビューを表示し、変更ステータスバーの色の使用を確認します

2)コード

UIView *topView=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)]; 
topView.backgroundColor=[UIColor blackColor]; 
[self.window.rootViewController.view addSubview:topView]; 
+0

ステータスバーを追加するだけでなく、画像の色に合わせてステータスバーの色を更新しようとしています。 –

0

下記の使用を設定するとUIStatusBarStyleLightContent

にステータスバーのスタイルを設定します。この種の問題が最後に発生したときに、任意の画像の上に目に見えるテキストを置くことができました。領域の色を定義するのに最も効果的な正しい方法は、1ピクセルに拡大縮小し、今より良い方法かもしれませんが、これは私たちが苦情をやったことがなかった十分にうまく、あなたは便利なんだどんな画像データバッファ形式に合理的に素直に適応する必要があります:

+ (UIColor *)adaptiveColorWithBackgroundImage:(UIImage *)image forRegion:(CGRect)region 
{ 
    region = CGRectMake(region.origin.x * image.scale, 
         region.origin.y * image.scale, 
         region.size.width * image.scale, 
         region.size.height * image.scale); 

    CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, region); 
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation]; 
    CGImageRelease(imageRef); 

    return [UIColor adaptiveColorWithBackgroundImage:croppedImage]; 
} 

+ (UIColor *)adaptiveColorWithBackgroundImage:(UIImage *)image 
{ 
    unsigned char rgb[4] = { 0 }; 

    // trust scaling to come up with best colored pixel 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef bitmap = CGBitmapContextCreate(rgb,1,1,8,4,colorSpace,kCGImageAlphaNoneSkipLast); 
    CGColorSpaceRelease(colorSpace); 
    CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh); 
    CGContextDrawImage(bitmap, CGRectMake(0,0,1,1), image.CGImage); 
    CGContextRelease(bitmap); 

    UIColor *imageColor = [UIColor colorWithRed:rgb[0]/255.f green:rgb[1]/255.f blue:rgb[2]/255.f alpha:1]; 
    UIColor *adaptiveColor = [UIColor adaptiveColorWithBackgroundColor:imageColor]; 

    return adaptiveColor; 
} 

+ (UIColor *)adaptiveColorWithBackgroundColor:(UIColor *)bkg 
{ 
    CGFloat grayComponent = 0.5; // this will default to dark text 

    CGColorSpaceRef colorSpace = CGColorGetColorSpace(bkg.CGColor); 
    CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); 

    switch (colorSpaceModel) 
    { 
     case kCGColorSpaceModelLab: 
     { 
      // Fallthrough... treat the Luminance component the same as grayscale 
     } 
     case kCGColorSpaceModelMonochrome: 
     { 
      const CGFloat *components = CGColorGetComponents(bkg.CGColor); 
      grayComponent = components[0]; 
      break; 
     } 
     case kCGColorSpaceModelRGB: // convert to grayscale 
     { 
      const CGFloat *components = CGColorGetComponents(bkg.CGColor); 
      grayComponent = (components[0] * 0.3f) + (components[1] * 0.59f) + (components[2] * 0.11f); 
      break; 
     } 
     case kCGColorSpaceModelPattern: 
     { 
      unsigned char rgb[4] = { 0 }; 

      // trust scaling to come up with best colored pixel 
      CGColorSpaceRef colorSpace1 = CGColorSpaceCreateDeviceRGB(); 
      CGContextRef bitmap = CGBitmapContextCreate(rgb,1,1,8,4,colorSpace1,kCGImageAlphaNoneSkipLast); 
      CGColorSpaceRelease(colorSpace1); 
      CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh); 

      CGContextSetFillColorWithColor(bitmap, [bkg CGColor]); 
      CGContextFillRect(bitmap, CGRectMake(0,0,1,1)); 

      CGContextRelease(bitmap); 

      grayComponent = (rgb[0]/255.0f * 0.3f) + (rgb[1]/255.0f * 0.59f) + (rgb[2]/255.0f * 0.11f); 
      break; 
     } 
     default: 
     { 
      // unsuported colorspace return default 
      break; 
     } 
    } 

    // dark background defined as greater than 60% gray 
    // slightly biased towards white 
    return (grayComponent <= 0.6) ? UIColor.whiteColor : UIColor.blackColor; 
} 
関連する問題