2009-10-05 67 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{} 
} 

使用上面的源代碼行我能加載圖像,但我的努力來繪製圖像失敗,拋出內存溢出Excep :( 此外,我想同樣的創建一個Win32移動應用程序,其中我能BOT荷載及以下線路繪製所需的圖像。

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();} 

我甚至嘗試創建一個Win32 DLL和C#應用程序調用它,但我不能。 任何人都可以幫我解決這個問題嗎?

+0

你還問這個問題已經:http://stackoverflow.com/questions/1490652/how-to-load-the-high-resolution-images-in-windows-mobile/1491591#1491591 如果AREN '不滿意縮略圖給你的調整大小的結果,然後你需要自己調整圖像的大小 – Matt 2009-10-05 23:01:42

+0

雅..馬特..我堅持任何方式我想嘗試一些:-( – Naruto 2009-10-06 05:00:12

回答

-1

你需要增加它的內存限制... 有不同的語言(PHP),一旦增加了25MB的內存限制類似的問題。 它解決了一個問題。

+2

他是怎麼做到的? – Brian 2009-10-05 16:26:34

0

雖然你不想使用OpenNETCF,我仍然會提供它: This似乎正是你正在經歷的。
不得不承認我自己沒有嘗試過 - 只是搜索了一下。

+0

我讀過這篇文章,我給了一個更徹底的鏈接,似乎有一個鏈接到源代碼的本地代碼和託管代碼的解決方案,如果您嘗試訪問Alex Feinman的博客,請更改.org中的.org網址.com。 – Shaihi 2009-10-05 16:34:52

+0

感謝Shaihi虐待嘗試.. – Naruto 2009-10-06 04:59:39

2

當然是的。你加載了一個圖像,然後試圖顯示整個事情。爲此,CF必須將其變成顯示驅動程序的位圖。 3264x2448x16bpp ==將近16MB。你應該做的是generating a thumbnail和圖矩形。

和往常一樣,智能設備框架already has this done for you

+0

謝謝,我會研究這個 – Naruto 2009-10-06 04:59:07

相關問題