목표는 이미지 RGB값을 받아와서
값이 높으면(흰색에 가까우면) 흰색으로
값이 낮으면(검은색에 가까우면)검은색으로
바꾸어 문서 이미지의 글씨를 좀 더 부곽시키기 위한 용도로 작성
-(UIImage*)convertGrayImage:(UIImage*)image
{
int orgWidth = (int)CGImageGetWidth(image.CGImage); // 이미지 가로
int orgHeight = (int)CGImageGetHeight(image.CGImage); // 이미지 세로
int imagePitch = (int)CGImageGetBytesPerRow(image.CGImage); // 이미지 한줄의 크기
int pixelPerByte = (int)CGImageGetBitsPerPixel(image.CGImage) / 8; // 픽셀당 바이트 수, 1byte = 8 bits
NSData* imageData = (__bridge_transfer NSData*)CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage)); // 이미지를 데이터로 변환
for(int y=0; y< orgHeight; y++) // 세로 길이 만큼
{
for(int x=0; x< orgWidth; x++) // 가로 길이 만큼
{
int *pDSt = (int *)(imageData.bytes + (y*imagePitch) + (x*pixelPerByte)); // 픽셀을 가져옴
int alphaValue = (CFSwapInt32BigToHost(*pDSt) & 0x000000FF); // 픽셀중 알파 값
int bValue = (CFSwapInt32BigToHost(*pDSt) & 0x0000FF00); // 픽셀 중 blue값
int gValue = (CFSwapInt32BigToHost(*pDSt) & 0x00FF0000); // 픽셀 중 green값
int rValue = (CFSwapInt32BigToHost(*pDSt) & 0xFF000000); // 픽셀 중 red 값
int checkValue = 0;
// alpha
if(alphaValue == 0) {// 알파 값이 0이면 흰색으로
*pDSt = CFSwapInt32BigToHost(*pDSt | 0xFFFFFFFF);
continue;
}
// red
if(rValue >= 0x96000000)
checkValue += 10;
// green
if(gValue >= 0x00960000)
checkValue += 10;
// blue
if(bValue >= 0x00009600)
checkValue += 10;
checkValue /= 3;
if(checkValue >= 10) // 밝으면 화이트로
*pDSt = CFSwapInt32BigToHost(0xFFFFFFFF);
else // 어두우면 블랙으로
*pDSt = CFSwapInt32BigToHost(0x000000FF);
}
}
// 변환 된 바이트를 이미지로
CGDataProviderRef imgrgbDataProvider = CGDataProviderCreateWithCFData((CFDataRef)imageData);
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(image.CGImage);
if (!(bitmapInfo & kCGBitmapByteOrder32Big)) // gallary or imageLoad 일 경우
bitmapInfo |= kCGImageAlphaNone;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGImageRef imageRef = CGImageCreate(orgWidth, orgHeight, 8, pixelPerByte*8, imagePitch,colorSpaceRef, bitmapInfo, imgrgbDataProvider, NULL, false, renderingIntent);
UIImage *resultImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGColorSpaceRelease(colorSpaceRef);
CGDataProviderRelease(imgrgbDataProvider);
return resultImage;
}
'프로그래밍 > iOS' 카테고리의 다른 글
[iOS]UIController textField 사용하기 (0) | 2016.11.15 |
---|---|
[iOS] XCode8에서 Coredata사용하기 (0) | 2016.11.15 |
[iOS] 카메라해상도와 이미지와의 관계 (0) | 2016.10.14 |
import (0) | 2016.10.05 |
[iOS] 이미지 회전함수(이미지 사이즈도 같이 바뀌게) (0) | 2016.09.22 |