【问题标题】:How to set PictureBox.Image to *.jpg-File on Compact Framework?如何在 Compact Framework 上将 PictureBox.Image 设置为 *.jpg-File?
【发布时间】:2016-03-03 12:53:48
【问题描述】:

我正在尝试在装有 Windows CE 的平板电脑上制作照片幻灯片。我想在公式的 PictureBox 中显示的每张图像都是 *.jpg 类型的。文件是例如~1MB 大,分辨率为 2304x1728。 当我使用以下代码时,我得到了 OutOfMemory 异常。

Bitmap bitmap = new Bitmap(file_name)
PictureBox.Image = bitmap

经过研究,我发现 *.jpg 文件可能“太大”而无法放入位图。在 VS2008 上使用 Compact Framework,我无法使用类似

Image image1 = Image.From(file_name)

如何从 jpg-Files 获取图像到我的 PictureBox ?

编辑[1]:

感谢您的 cmets。我发现我的图片无法正确加载,因为我的设备没有足够的内存来临时加载“巨大”的图片。我通过编写一些代码来解决这个问题,这些代码在我将图像复制到我的设备之前调整它们的大小。

        Image bitmapNew = null;
        using (Bitmap bitmap = (Bitmap)Image.FromFile(filename))
        {
            double proportion = (double) bitmap.Width / bitmap.Height;
            proportion = Math.Round(proportion, 2);
            if (proportion > 1)
            {
               iWidth = iWidthMax;
               iHeight = (int)(iWidthMax / proportion);
            }
            else
            {
               iHeight = iHeightMax;
               iWidth = (int) (iHeightMax * proportion);
            }
            bitmapNew = new Bitmap(bitmap, new Size(iWidth, iHeight));

       }

设备的分辨率定义参数iWidthMax & iHeightMax

【问题讨论】:

  • 您的 CE 设备的屏幕尺寸是多少?似乎最简单的答案是不要尝试显示比您的设备屏幕大得多的图像。

标签: c# visual-studio-2008 jpeg compact-framework windows-ce


【解决方案1】:

JPG 或任何其他压缩图像文件类型的文件大小并不能说明存储了多少像素(5、10 或更多百万像素)。要在屏幕上显示图像,所有像素都必须加载到内存中。对于较大的图像,这是不可能的,尤其是在具有 32MB 进程插槽限制的 Windows Mobile 上。 即使可以加载整个图像也没有任何意义,因为屏幕没有那么多像素,只会每 10 个或 20 个像素显示一次。

最好的方法是只加载屏幕和内存可以处理的内容。标准类都是基于内存的,所以你会很早就达到内存限制。但是有 OpenNetCF 能够仅使用文件流即时“缩放”图像。

我在https://github.com/hjgode/eMdiMail/blob/master/ImagePanel/ImageHelper.cs 中使用它来获得适合加载和显示的缩放图像。查看 getScaledBitmap() 和 CreateThumbnail() 的代码。这些函数是代码中自定义控件的一部分,但可以很容易地用于其他目的。

该项目用于扫描文档或名片,将它们显示为拇指和缩放,然后将扫描的图像通过电子邮件发送到文档服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2012-03-29
    • 2014-03-03
    • 2011-07-01
    • 2011-12-18
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多