如何在 Compact Framework 上将 PictureBox.Image 设置为 *.jpg-file

本文关键字:设置 Image jpg-file PictureBox 上将 Compact Framework | 更新日期: 2023-09-27 18:37:15

我正在尝试在装有Windows CE的平板电脑上开发照片幻灯片。我想在公式的图片框中显示的每个图像都是 *.jpg 类型。例如,文件大小为~1MB,分辨率为2304x1728。当我使用以下代码时,我收到内存不足异常。

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

经过研究,我发现*.jpg文件可能"太大"而无法放入位图。使用VS2008上的紧凑框架,我无法使用类似的东西

Image image1 = Image.From(file_name)

如何将图像从jpg文件获取到我的图片框?

编辑[1]:

感谢您的评论。我发现我的照片无法正确加载,因为我的设备没有足够的内存来临时加载"巨大"图像。我通过编写一些代码来调整图像大小,然后再将它们复制到我的设备,从而解决了这个问题。

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

设备的分辨率定义了参数iWidthMaxiHeightMax

如何在 Compact Framework 上将 PictureBox.Image 设置为 *.jpg-file

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

最好的方法是仅加载屏幕和内存可以处理的内容。标准类都是基于内存的,因此您将很早就达到内存限制。但是有OpenNetCF,它只能使用文件流动态"缩放"图像。

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

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