문제

합리적으로 빠른 GDI+ 비트 맵으로 원시 이미지 파일 (특히 Canon CR2 및 Adobe DNG 파일)을 읽는 좋은 방법이 있습니까?

설치된 이미지 코덱을 사용하여 이미지를 읽은 다음 이미지 컨트롤에 표시하는 WPF에서 실행되는 예를 찾았습니다. 또한이 예제를 수정하여 WPF 이미지를 메모리 스트림에 작성하고 비트 맵을 생성하여 GDI+ 비트 맵을 생성했습니다. 그러나이 과정은 느립니다! 끔찍하게 느립니다! 간단한 이미지를 열면 컴퓨터에서 약 10 초가 걸립니다. 이 솔루션은 또한 WPF 어셈블리에 대한 참조가 필요하며, 특히 ASP.NET 프로젝트에서 코드를 실행하고 싶지 않기 때문에 옳지 않습니다.

이미지의 배치 변환을 수행하는 프로그램이 있지만 요청시 이미지를 동적으로 변환하는 것이 좋습니다.

그렇다면 어떤 제안이 있습니까?

도움이 되었습니까?

해결책

면책 조항 : 나는 Atalasoft에서 일합니다.

우리의 DotImage Photo Pro 제품은 이것을 할 수 있습니다. 직접 수행하려면 OpenSource DCRAW를 감싸거나 Paint.net을 수행하는 방법을 살펴보십시오 (원시 플러그인이 있다고 생각합니다).

다른 팁

DotImage Photo Pro 구성 요소는 잘 작동했지만이를 사용하여 원시 파일에서 미리보기 이미지를 추출하는 데 문제가있었습니다. 또한이 프로젝트의 예산을 벗어납니다.

그러나 Paint.net의 원시 플러그인 코드를 찾았습니다. 여기 그리고 내 필요에 적응하는 것은 매우 간단했습니다. 플러그인은 DCRAW 실행 파일 USIGN을 실행합니다 Process.Start 그리고 출력을 읽습니다 StandardOutput 개울. 아주 간단하고 빠릅니다! :-)

편집하다:

플러그인에 대한 링크는 더 이상 작동하지 않지만 이미지를 추출하는 데 사용한 코드가 있습니다. 다음 코드는 RAW 파일에 저장된 JPG- 프리뷰를 추출합니다. 전체 이미지를 원한다면 -e 인수를 제거해야합니다. 그러나 일부 카메라의 경우 GDI+가 읽을 수없는 PPM 이미지를 얻을 수 있습니다.

public Stream GetImageData(string inputFile, string dcRawExe)
{


    var startInfo = new ProcessStartInfo(dcRawExe)
    {
        Arguments = "-c -e \"" + inputFile + "\"",
        RedirectStandardOutput = true,
        UseShellExecute = false
    };

    var process = Process.Start(startInfo);

    var image = Image.FromStream(process.StandardOutput.BaseStream);

    var memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Png);

    return memoryStream;
}

또한 DCRAW 사본이 필요합니다. 이 사이트에서 dcrawms.exe를 사용했습니다. http://www.insflug.org/raw/downloads/

다음은 DCRAW의 C# 포트입니다.
https://sourceforge.net/projects/dcrawnet/

편집하다 :
방금 원시 파일에서 exif 데이터를 읽기 위해 내 프로젝트에서 작동하게되었습니다.

  1. 프로젝트 속성을 열고 설정합니다 출력 유형 에게 수업 도서관.
  2. 다시 컴파일.
  3. 자신의 프로젝트에서 DLL에 대한 참조를 추가하십시오.
  4. 추가하다 using dcraw; 상단에.
  5. 이 코드 줄을 선언하십시오.

    DcRawState state = new DcRawState();
    state.inFilename = filename;
    state.ifp = new RawStream(filename);
    
    
    Identifier id = new Identifier(state);
    id.identify(state.ifp);
    

이제 내부의 모든 케이크를 확인하십시오 상태 (원시 파일이 지원되었다고 가정하고 예외가 발생하지 않았다고 가정합니다.)

우와. .NET MVC 프로젝트를 위해 이것을 우연히 발견했습니다. Raw를 할 수 있으며, 당신이 꿈꾸는 세상에서 모든 것을 할 수 있습니다. 코드, 예제 및 다양한 프로그래밍 언어 선택이 포함됩니다. 너무 좋아 보인다. 나는 돈을 사용하기 전에 돈을 기부하는 것처럼 느껴진다.

링크를 넣는 것이 권장되지 않기 때문에 "imagemagck"의 Google은 권장되지 않습니다. 위키 백과 항목도 있습니다.

나는 이것이 누군가를 돕기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top