如何在iOS中实现夜间模式书籍阅读器

时间:2015-01-28 16:55:29

标签: ios objective-c image-processing core-image

我试图在我正在处理的pdf阅读器中反转图像的颜色以模拟夜晚模式,所以我尝试使用一个补码。我有一个问题,图像移动到右边也有一些噪音。

所以我问是否有更好的方法,请告诉我。此外,如果有一个带夜间模式的pdf阅读器库,你可以告诉我它并为我节省一天。

注意:

1-我使用了此链接中的代码:http://five.agency/iphone-image-processing/

2-这本书是pdf,页面是图像而不是文本。

3-我正在附上测试图像和结果。

self.imageView.image = [self onesComplement:image];

...

-(UIImage *)onesComplement:(UIImage *) image
{

CGImageRef sourceImage = image.CGImage;
CFDataRef theData;
theData = CGDataProviderCopyData(CGImageGetDataProvider(sourceImage));
UInt8 *pixelData = (UInt8 *) CFDataGetBytePtr(theData);
long dataLength = CFDataGetLength(theData);
int red = 0;
int green = 1;
int blue = 2;
for (int index = 0; index < dataLength; index +=4) {
    pixelData[index + green] = ~ pixelData[index + green];
        pixelData[index + red] = ~ pixelData[index + red];
        pixelData[index + blue] = ~ pixelData[index + blue];

}
short bitsPerComponent = 8;
CGContextRef context;
context = CGBitmapContextCreate(pixelData,
                                CGImageGetWidth(sourceImage),
                                CGImageGetHeight(sourceImage),
                                bitsPerComponent,
                                CGImageGetBytesPerRow(sourceImage),
                                CGImageGetColorSpace(sourceImage),
                                kCGBitmapByteOrderDefault);

CGImageRef newCGImage = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newCGImage];
CGContextRelease(context);
CFRelease(theData);
CGImageRelease(newCGImage);
return  newImage;
}

Test image

Result image

1 个答案:

答案 0 :(得分:-1)

创建一个夜间模式切换,一旦打开,在书页图像上方添加一个UILabel,并给它一个低alpha的黑色背景,你将通过它看到书,屏幕将足够黑暗夜间模式阅读。