繁体   English   中英

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

[英]How to set PictureBox.Image to *.jpg-File on Compact Framework?

我正在尝试使用Windows CE在平板电脑上开发照片幻灯片。 我想在公式编辑器的图片框中显示的每个图像都是* .jpg类型的。 文件的大小约为1MB,分辨率为2304x1728。 当我使用以下代码时,出现OutOfMemory异常。

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

经过研究,我发现* .jpg文件可能太大而无法放入Bitmap中。 使用VS2008上的Compact Framework,我无法使用类似

Image image1 = Image.From(file_name)

如何从jpg文件到PictureBox中获取图像?

编辑[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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM