2012-01-01 4 views
0

FreeImage.Net 라이브러리를 사용하여 이미지를 열고 표준 비트 맵으로 변환하려고합니다. 단, 누락 된 단계가 있거나 FreeImage 만 있어야합니다 32bpp의 RGBA로 부동 소수점 RGBA 변환 할 수 없습니다 :부동 소수점 RGBA 비트 맵을 표준 Dotnet 비트 맵으로 변환

FreeImageBitmap fib = new FreeImageBitmap("C:\\test.exr"); 
Console.WriteLine(fib.ImageType); //FIT_RGBAF 
fib.ConvertType(FREE_IMAGE_TYPE.FIT_BITMAP, true); //returns False 

변환이 실패

1을 입력하는 입력 (12)에서 변환 할 수 없습니다; 그러한 전환은 존재하지 않습니다.

나는 전적으로 System.Drawing.Bitmap로 변환 할 수있는의 목적으로 32bpp의 RGBA 비트 맵이 필요합니다, 그래서 나는 GDI +를 사용하여 그릴 수 있습니다. 필자는 필요하다면 다른 이미지 라이브러리를 사용하거나 누군가가 솔루션을 찾을 수 있다고 생각하면 Winforms를 통해 WPF를 고려할 용의가 있습니다.

내가 테스트를 위해 포인트 EXR 부동 예를 들어 업로드 한 : 니코 말했듯이 http://dl.dropbox.com/u/2817180/test.exr

+1

잘 비트 맵에서 데이터를 읽고 다른 사람에게 쓸 수 있습니다. – neeKo

+0

FreeImage.Net은이 변환을 지원하지 않습니다 - [documentation] (http://ignum.dl.sourceforge.net/)를 참조하십시오. project/freeimage/Source % 20Documentation/3.15.1/FreeImage3151.pdf) (page 36) – nirbruner

+0

파싱해야 할 비트 맵 파일의 예제를 업로드하면 도움이됩니다. –

답변

2

, 당신은 수동으로 수행해야합니다. 안전하지 않은 코드와 포인터를 사용하여 메모리 버퍼를 PIN으로 지정하고 이동하지 못하게하면 루틴은 실행이 빠르고 쓰기 쉽습니다.

원본 및 대상 형식이 하나 뿐인 경우 더 그렇습니다.

+0

안전하지 않은 포인터 기반 코드가 동일한 프로 시저의 관리되지 않는 C++ 구현처럼 빠르게 실행된다고 가정하는 것이 맞습니까? – Rotem

+1

빠르지는 않습니다. 만약 당신이 그것을 C++로 코딩 할 수 있고'정적 인 extern'을 통해 그것을 호출하면 승자가 될 것입니다. –

+1

나는 당신이 제안한대로했는데, 이것이 내 첫 번째 C++ 코드라고 생각할 때 결과는 괜찮습니다. C++ 코드는 안전하지 않은 C# 코드보다 약 40 % 빠르게 실행됩니다. 다른 잠재적 인 답변에 기회를주기 위해 답을주고 받기 전에 다른 날을 기다릴 것입니다. – Rotem

관련 문제