2009-10-05 6 views
1

고해상도 이미지 (예 : 3264x2448)를로드하려고합니다. 이를 위해 저는 C#에서 IImageFactory 클래스를 사용하고 있습니다. IImageFactory는 Microsoft 사이트에서 다운로드됩니다. 고해상도 이미지를로드하려고하면 "메모리 부족"예외가 발생합니다. 상기 아래 샘플 봐 유무 :IImagingFactory를 사용하여 고해상도 이미지를로드 할 때 메모리 부족 오류가 발생합니다.

IImage GetIImage(string fileName) 
{ 

Bitmap bitmap = null; 

Graphics graphics = null; 
IntPtr hdcDestination = IntPtr.Zero; 
try { 
    IImage image = null; 
    IImagingFactory imagingFactory = ImagingFactory.GetImaging(); 
    imagingFactory.CreateImageFromFile(fileName, out image); 
    bitmap = new Bitmap(width, height); 
    graphics = Graphics.FromImage(bitmap); 
    hdcDestination = graphics.GetHdc(); 
      Rectangle dstRect = new Rectangle(0, 0, width, height); 
    image.Draw(_graphicsHDC, ref dstRect, IntPtr.Zero); 
} 
catch{} 
} 

나는 이미지를로드 할 수 있었다 위의 소스 라인을 사용하지만, 추가로에서 OutOfMemory Excep :( 을 던지는 실패 이미지를 그려 내 노력을, 내가 만들어 같은 시도 는 Win32 모바일 응용 프로그램은,있는 나는로드 봇 수있는 다음과 같은 라인을 원하는 이미지를 그립니다. 나는 심지어는 Win32 DLL을 만드는 시도

void DrawImage(HDC *hdc, char *FileName, int width, int height) 
{ 
IImagingFactory *pImgFactory = NULL; 
IImage *pImage = NULL; 
RECT rc = { 0, 0, width, height}; 

WCHAR Name[MAX_PATH] ={0}; 
mbstowcs (Name, FileName, strlen (FileName)); 
CoInitializeEx(NULL, COINIT_MULTITHREADED); 
if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory, 
           NULL, 
           CLSCTX_INPROC_SERVER, 
           IID_IImagingFactory, 
           (void **)&pImgFactory))) 
{ 
    // Load the image from the JPG file. 
    if (SUCCEEDED(pImgFactory->CreateImageFromFile(Name, &pImage))) 
    { 
     pImage->Draw(*hdc, &rc, NULL); 
     pImage->Release(); 
    } 

    pImgFactory->Release(); 
} 
CoUninitialize();} 

및 C# 응용 프로그램에서 호출하지만 난 할 수 없습니다. 사람이 수 이 문제를 해결하기 위해 도와주세요.

+0

당신은 이미이 질문을했다 : 당신이 http://stackoverflow.com/questions/1490652/how-to-load-the-high-resolution-images-in-windows-mobile/1491591#1491591을 때로 믿을 경우 크기 조정의 결과에 만족하지 못한다. 섬네일이주는 것은 당신에게 이미지를 어떻게 든 크기 조정해야한다. – Matt

+0

나중에 .. 매트. 어떤 방법 으로든 붙어있는 어떤 방법으로 든 붙어있다 .--( – Naruto

답변

-1

메모리 제한을 늘려야합니다 ... 다른 언어 (PHP)에서 비슷한 문제가 발생했는데 한 번 메모리 제한을 25MB로 늘렸습니다. 문제가 해결되었습니다.

+2

그리고 어떻게 그 일을 하는가? – Brian

0

OpenNETCF를 사용하고 싶지는 않지만 어쨌든 나는 그것을 제공 할 것입니다 : This 정확히 당신이 겪고있는 것 같습니다.
나는 나 자신을 시험해 보지 않았다는 것을 인정해야한다 - 조금만 googled했다.

+0

나는 더 철저하게 링크를 준 게시물을 읽었습니다. 네이티브 코드와 그것을 호출하는 관리 코드에 소스 코드가 포함 된 솔루션에 대한 링크가있는 것 같습니다. Alex Feinman의 블로그에 액세스하려고하면 .org를 url to .com – Shaihi

+0

감사합니다. Shaihi ill try .. – Naruto

2

물론 그렇습니다. 이미지를로드 한 다음 모든 것을 표시하려고합니다. 이렇게하려면 CF가이를 디스플레이 드라이버의 비트 맵으로 변환해야합니다. 3264x2448x16bpp == 거의 16MB. 당신이해야 할 일은 generating a thumbnail이고 그림은 이며 그 사각형에입니다.

평상시처럼 스마트 장치 프레임 워크 already has this done for you.

+0

감사합니다. – Naruto

관련 문제