2

我正在开发一个简单的代码来从 filedialog 获取图像,我希望它显示在图片框中。但我收到错误“内存不足”的图像很少。

这是我的代码

Dim srcmap As Bitmap
srcmap = New Bitmap(OpenFileDialog1.FileName)
Dim destbit As New Bitmap(220, 220)
Dim srcRec As New Rectangle(0, 0, srcmap.Width, srcmap.Height)
Dim destRec As New Rectangle(0, 0, 220, 220)
Dim g As Graphics
g = Graphics.FromImage(destbit)
g.DrawImage(srcmap, destRec,srcRec, GraphicsUnit.Pixel)
picturebox.Image = destbit
4

1 回答 1

1

移动设备的资源有限。直到基于 Windows CE 5 的操作系统(目前最新称为 Windows Embedded Handheld 6.5.3),每个进程仅获得 32MB 程序内存。此内存受到其他进程加载的 DLL 的限制,您可能有 24MB 或更少的空间可用于新进程。

您应该只加载图像数据的缩略图表示,而不是加载可能 15MB(5MP 图像)或更多的整个图像数据。将 15MB 图像数据加载到例如只有 1MB 像素数据的图片框是没有意义的。

OpenNetCF 框架提供了一些类来使用流创建缩略图。其他加载数据然后调整其大小的尝试将失败。

抱歉,我只有 C# 代码示例:这是一个图像帮助程序类http://code.google.com/p/intermeccontrols/source/browse/DPAG7/Hasci.TestApp.And_Controls/IntermecControls/Hasci.TestApp。 IntermecCamera3/ImageHelper.cs,这是我使用它加载 5MP 图像的方法http://code.google.com/p/intermeccontrols/source/browse/DPAG7/Hasci.TestApp.And_Controls/IntermecControls/Hasci.TestApp.IntermecCamera3/ IntermecCameraControl3.cs

    OpenNETCF.Drawing.Imaging.StreamOnFile m_stream;
    Size m_size;
    /// <summary>
    /// this will handle also large bitmaps and show a thumbnailed version on a picturebox
    /// see http://blog.opennetcf.com/ctacke/2010/10/13/LoadingPartsOfLargeImagesInTheCompactFramework.aspx
    /// </summary>
    /// <param name="sFileName">the name of the file to load</param>
    private void showImage(string sFileName)
    {
        var stream = File.Open(sFileName, FileMode.Open);
        m_stream = new StreamOnFile(stream);
        m_size = ImageHelper.GetRawImageSize(m_stream);
        System.Diagnostics.Debug.WriteLine("showImage loading " + sFileName + ", width/height = " + m_size.Width.ToString() + "/"+ m_size.Height.ToString());
        //CameraPreview.Image = ImageHelper.CreateThumbnail(m_stream, CameraPreview.Width, CameraPreview.Height);
        CameraSnapshot.Image = ImageHelper.CreateThumbnail(m_stream, CameraPreview.Width, CameraPreview.Height);
        showSnapshot(true); //show still image
        m_stream.Dispose();
        stream.Close();
    }
于 2012-08-28T03:43:55.503 回答