代码之家  ›  专栏  ›  技术社区  ›  Naruto

使用iImagingFactory加载高分辨率图像时出现内存不足异常

  •  1
  • Naruto  · 技术社区  · 15 年前

    我正在尝试加载高分辨率图像(如3264x2448)。为此,我使用c_中的iImageFactory类。iImageFactory是从Microsoft站点下载的。如果我尝试加载高分辨率图像,就会出现“内存不足”异常。请看下面的示例:

    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{}
    }
    

    使用上面的源代码行,我可以加载图像,但绘制图像的工作失败了,抛出了一个内存异常:( 此外,我还尝试了同样的方法,创建了一个win32移动应用程序,在这个应用程序中,我可以自动加载并使用以下行绘制所需的图像。

    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 app调用它,但我做不到。 有人能帮我解决这个问题吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   ctacke    15 年前

    当然有。你加载了一个图像,然后试图显示整个东西。为此,cf必须将其转换为显示驱动程序的位图。3264x2448x16bpp==接近16MB。你应该做的是 generating a thumbnail 并条 那个 到矩形。

    和往常一样,智能设备框架 already has this done for you .

        2
  •  0
  •   Shaihi    15 年前

    尽管您不想使用opennetcf,但我还是会提供它: This 似乎正是你所经历的。
    不得不承认我自己没有试过-只是用谷歌搜索了一下。

        3
  •  -1
  •   David King    15 年前

    你需要提高它的内存限制… 在不同语言(php)中遇到了类似的问题,曾经将内存限制增加到25mb。 它解决了一个问题。