0

시간을내어 읽어 주셔서 감사합니다. 나는 잠시 뒤로 쓴 코드의 속도를 높이려고 노력하고있다. XCode에서 악기를 사용하여 나는이 방법, 특히 getPixel 호출에서 주요 병목 현상이 있음을 발견했습니다. 기본적으로 내 메서드는 두 개의 NSBitmapImageRep 객체를 사용하여 픽셀을 픽셀 단위로 비교하여 차이점을 찾습니다. 누구든지 아래 또는 다른 접근법에 대한 조언이 있습니까? 감사.NSBitmapImageRep 객체를 픽셀 단위로 비교하는 더 빠른 방법이 있나요?

  • (BOOL) fasterCompareImage (NSBitmapImageRep *) imageRepA 동일했다 (NSBitmapImageRep *) imageRepB {

    // 명백한 차이를 보일 즉 : 폭과 높이의 차이 ... NSSize imageASize = imageRepA 크기]; NSSize imageBSize = [imageRepB size]; if ((imageASize.width! = imageBSize.width) || (imageASize.height! = imageBSize.height)) { return NO; }

    // 이제 각 지점을 살펴보기 시작합니다. NSUInteger pixelOfA [3];
    NSUInteger pixelOfB [3]; (단째 < (imageASize.height) 행 = INT 행 +1 행 = 0) {위한 위한

    (INT의 COL = 0; < 내지 컬럼 (imageASize.width) COL COL = +1) { [imageRepA getPixel : pixelOfA atX : row y : col]; [imageRepB getPixel : pixelOfB atX : row y : col];

    if(pixelOfA[1] != pixelOfB[1]) { 
         return NO; 
        } 
    } 
    

    }

    창 YES; 당신이 그랬던 것처럼 당신이 집중 루프를 사용할 때 은}

답변

1

몬티, 당신은 OBJ-C 호출을 많이 사용하지 말아야합니다.

는 NSBitmapImageRep의 CGImage은 참조를 보유하고있다. 그리고 CGImage는 2 CFStruct를 비교하기 위해 CFEqual을 사용할 수 있습니다. 그 후에 CGImage의 평등성은 픽셀, 샤넬, 비트 맵 정보, 기타 등등에 관한 것이라는 것을 손가락으로 교차 할 필요가 있습니다 ... 개념적으로 두 개의 동일한 이미지가 동일한 것은 무엇인지 모릅니다. 그러나 당신이 원하는 것을하기 위해 여기에 많은 도구가 있습니다.

죄송합니다. 실제로 응답이 아니더라도 큰 도움이됩니다. 원하는대로 수행해야합니다.

+0

감사합니다. Mr Bonjour. 앞으로 며칠 이내에 귀하의 제안을 살펴보고 다시보고하겠습니다. 감사합니다. – Monty

+0

안녕하세요, Bonjour 님, 제안 된대로 CGImageRef를 사용하여 속도를 배가 시켰습니다. :) 대신 CFEqual이 작동하지 않아 실제로 CGImageRef에있는 각 CGImageRef의 바이트를 비교했습니다 (CGImageRef에 실제로 저장 됨)). 바이트를 비교하기 위해 CFDataRef를 가져 오는 것은 정말 비싼 작업입니다. 이렇게하려면 CGDataProviderCopyData (...) 함수를 사용하고 있습니다. 다른 방법을 제안하거나 CFIqual을 사용하여 CGImages를 비교하는 방법을 설명해 주시겠습니까? – Monty

+1

이제 CFEqual이 작동하지 않는 이유를 알았습니다. CGImageRef에 저장된 픽셀 데이터 이외의 다른 속성 (예 : bitsPerPixel)이 있고이를 모두 비교하는 CFEqual이 있기 때문입니다. 다른 사람들이 이미지를 비교하는 정말 빠른 방법을 찾고 있다면 NSI 대응 객체가 아닌 CFImageRef '객체'를 사용하고 CFEqual을 호출하여 비교할 수 있습니다. CFEqual이 픽셀 데이터뿐만 아니라 모든 속성을 비교한다는 것을 확인하십시오. 감사합니다. Bonjour 당신은 올바른 방향으로 나를 설득했습니다 :) – Monty