Im '입력 이미지의 모든 픽셀을 가장 근접한 RGB로 대체하려고합니다. 색상 및 입력 이미지가 포함 된 배열이 있습니다. 여기 내 코드입니다, 그것은 내게 예상대로 출력 이미지를 제공하지만 한 이미지를 처리하는 데 오랜 시간 (약 분)이 걸립니다. 아무도 내가 코드를 개선하는 데 도움을 줄 수 있습니까? 또는 다른 제안이 있으면 도움을주십시오.이 이미지 처리를 최적화하는 방법 가장 가까운 사용 가능한 RGB로 이미지의 모든 픽셀을 대체 하시겠습니까?
UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGImageGetWidth(sourceImage),CGImageGetHeight(sourceImage)), NO, 0.0f);
//Context size I keep as same as original input image size
//Otherwise, the output will be only a partial image
CGContextRef context;
context = UIGraphicsGetCurrentContext();
//This is for flipping up sidedown
CGContextTranslateCTM(context, 0, self.imageViewArea.image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// init vars
float d = 0; // squared error
int idx = 0; // index of palette color
int min = 1000000; // min difference
UIColor *oneRGB; // color at a pixel
UIColor *paletteRGB; // palette color
// visit each output color and determine closest color from palette
for(int y=0; y<sizeY; y++) {
for(int x=0; x<sizeX; x++) {
// desired (avg) color is one pixel of scaled image
oneRGB = [inputImgAvg colorAtPixel:CGPointMake(x,y)];
// find closest color match in palette: init idx with index
// of closest match; keep track of min to find idx
min = 1000000;
idx = 0;
CGContextDrawImage(context,CGRectMake(xx, yy, 1, 1),img);
}
}
UIImage *output = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.imageViewArea.image = output;
코드 중 가장 오래 걸리는 부분 (루프,'UIGraphics' 또는'CGContext' 함수 등)은 무엇입니까? 코드 프로파일. – Jacob
'ColorDiff'의 코드는 무엇입니까? 또한, 컨벤션은 초기 소문자로 메소드를 명명하는 것입니다. 예 :'[self colorDiffWithPalette : paletteRGB forRGB : oneRGB]' – zaph
@Jacob : 루프가 대부분의 시간을 소비한다고 말합니다. – user1139699