질문 의견의 일부 사람들은 반복적으로 사소한 것이라고 말했기 때문에 실제로 그렇게했습니다. 실제로 실제 비교를 사용자에게 남겨두고 현재 디렉토리의 이미지를 정렬하는 응용 프로그램입니다 . 1
C # for .NET 2로 작성되었습니다. Mono에서도 작동합니다 (지금까지 Linux에서 테스트). PATH에 dcraw 가 필요합니다 (Windows 또는 OS X 용으로 컴파일 된 실행 파일은 여기에서 다운로드 할 수 있음 ).
현재 사용자 상호 작용은 매우 기초적입니다. 이것은 아마도 변경 될 수 있습니다. 또한 코드는 그러한 해킹 작업에서 평소와 같이 사악한 혼란입니다.
정렬 할 이미지가 포함 된 디렉토리에서 응용 프로그램을 시작해야합니다. 그런 다음 찾을 수 있고 처리 할 수있는 모든 이미지를로드합니다 (JPEG, GIF, PNG, BMP는 기본적으로 지원되며 다른 모든 형식은 dcraw에서 지원되거나 그렇지 않은 경우 생략 됨). 모든 이미지가 메모리에 미리로드되어 디스플레이 속도를 높이기 때문에 이미지 수를 합리적으로 유지하십시오. 약 600 개의 이미지가있는 폴더에서 이미지를 시작하여 약 2GiB 메모리 사용으로 종료했습니다.
그 후 왼쪽과 오른쪽에 이미지가있는 2 개의 창을 볼 수 있습니다. 둘 중 가장 좋은 것으로 생각되는 것을 클릭하십시오. 그러면 두 개의 새로운 이미지가 생깁니다. 끝날 때까지 계속하십시오. 원하는 경우 프로그램을 닫을 수 있습니다. 중단 한 부분부터 다시 시작됩니다.
필요한 모든 비교를 완료 한 후 이 결과를 볼 수 있습니다 :
왼쪽에는 정렬 된 이미지 목록이 있고 맨 위에는 가장 높은 순위가 있고 맨 아래에 가장 낮은 순위가 있습니다.
할 일 목록:
- 정렬 할 이미지를 선택할 수 있습니다.
- 세로 사진이 항상 가로 방향으로 표시되는 문제를 해결하십시오 (적어도 원시 이미지의 경우 dcraw는 회전을 허용하지만 자동으로 수행 할 수 없으며 외부에서 쉽게 찾을 수있는 방법이 보이지 않습니다).
- 많은 수의 이미지에 대한 메모리 사용량을 줄입니다.
- 이미지를 미리 섞어 거의 동일한 이미지의 버스트가 서로 직접 비교 될 가능성이 줄어 듭니다.
- 정렬 스레드와 UI 간의 동기화를 변경하여 더 이상 의존하지 않고
Thread.Sleep
적절한 동기화 방법을 사용하십시오.
- 1 : 1 미리보기 (또는 더 큰 미리보기)를 추가하십시오. 현재 이것은 픽셀 레벨에서 사물을 판단하는 데 사용할 수 없습니다.
여기 5시 26 분이니까 지금은 그만 해킹을 멈 춥니 다.
소스 코드는 내 SVN 저장소 에서 찾을 수 있으며 MIT 라이센스에 따라 릴리스됩니다. 나는 패치를 환영합니다 ;-)
위 스크린 샷의 이미지는 내 자신의 것입니다.
1 물론 다른 사람들이 나를 믿고 싶어하는 것만 큼 사소한 것은 아니 었습니다. Libraw와의 오랜 투쟁 끝에, 나는 단순히 dcraw 경로를 갔다. 예쁘지는 않지만 최소한의 코드로 작동합니다.
2 이것은 n log 2 n 의 순서입니다. 여기서 n 은 비교 된 그림의 수입니다. 따라서 20 개의 그림의 경우 약 20 × 4.3 ≈ 85의 비교를 기대할 수 있습니다. 작은 숫자가 아닙니다. 언급 한 300 개 이미지의 경우 약 2400이됩니다. 수동으로 수행해야하는 실제 수는 (a) 복잡성 (선형 계수를 생략하기 때문에)과 (b) 지금까지 관찰 한 범위에서 더 작습니다. 불일치를 피하기 위해 사용자에게 동일한 두 이미지에 대해 두 번 프롬프트되지 않고 (양쪽 순서로) 양쪽에 동일한 이미지로 프롬프트되지 않습니다.