簡體   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