2015-05-14 3 views
1

Я искал уже заданные вопросы, но все они просто описывают, как получить пиксельный цвет UIImage (который я уже сделал, но это не лучшее решение в моем случае) ,Быстро и эффективно получить черный экран (вид)

Я хочу проверить все пиксели своего экрана и получить количество черных пикселей или почти черные (очень темные) пиксели. Я знаю, как проверить, насколько темным является один пиксель - с проверкой, не выбраны ли значения RGB (255) пикселя менее 10 или что-то в этом роде. Но я не знаю, как быстро и эффективно проверять полное количество пикселей UIImage.

Так что я хочу проверить все пиксели своего экрана и получить их число. Позже в моем приложении я делаю это снова и сравниваю количество черных пикселей до и после некоторых событий.

Есть ли быстрое решение для их получения?

+0

Немного улучшил читаемость, попытался объяснить реальную проблему немного яснее. –

+0

Вы можете взять «снимок» экрана, и теперь проблема такая же, как получение пикселей изображения. – matt

+0

@matt Я понял! В любом случае, спасибо. Это именно то, что я искал. – MOzeb

ответ

0

Это был «снимок», который я искал, если кто-то еще будет иметь подобную ситуацию. Я сделал снимок:

UIGraphicsBeginImageContext(self.view.bounds.size); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *original = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

А потом искал черные пиксели в нем:

width = (int)original.size.width; 
    height = (int)original.size.height; 


    CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(original.CGImage)); 


    const UInt8 *pixels = CFDataGetBytePtr(imageData); 
    UInt8 blackThreshold = 5; // or some value close to 0 - dark pixels 
    int bytesPerPixel = 4; 
     for(int x = 0; x < width; x++) { 
     for(int y = 0; y < height; y++) { 
      int pixelStartIndex = (x + (y * width)) * bytesPerPixel; 

     UInt8 redValue= pixels[pixelStartIndex]; 
     UInt8 greenValue = pixels[pixelStartIndex + 1]; 
     UInt8 blueValue = pixels[pixelStartIndex + 2]; 

if(redValue < blackThreshold && blueValue < blackThreshold && greenValue < blackThreshold) { 
      /// count black pixels ore something else you want to do 
     } 
    } 
} 
Смежные вопросы