[VB2005]PictureBox 的大小限制

因為有一部分不打算花太多時間寫,所以讓放大的部分直接調整 PictureBox 大小,讓系統自己去掌控顯示縮放的結果,但是放大過大時,會產生類似如下錯誤:
System.ComponentModel.Win32Exception 未處理
  Message="存放體空間不足,無法處理此命令。"
  Source="System.Drawing"
  ErrorCode=-2147467259
  NativeErrorCode=8
  StackTrace:
       於 System.Drawing.BufferedGraphicsContext.CreateCompatibleDIB(IntPtr hdc, IntPtr hpal, Int32 ulWidth, Int32 ulHeight, IntPtr& ppvBits)
       於 System.Drawing.BufferedGraphicsContext.CreateBuffer(IntPtr src, Int32 offsetX, Int32 offsetY, Int32 width, Int32 height)
       於 System.Drawing.BufferedGraphicsContext.AllocBuffer(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)
       於 System.Drawing.BufferedGraphicsContext.AllocBufferInTempManager(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)
       於 System.Drawing.BufferedGraphicsContext.Allocate(IntPtr targetDC, Rectangle targetRectangle)
       於 System.Windows.Forms.Control.WmPaint(Message& m)
       於 System.Windows.Forms.Control.WndProc(Message& m)
       於 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       於 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       於 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       於 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       於 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       於 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       於 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       於 System.Windows.Forms.Application.Run(ApplicationContext context)
       於 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       於 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       於 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       於 vbtest.My.MyApplication.Main(String[] Args) 於 17d14f5c-a337-4978-8281-53493378c1071.vb: 行 81
       於 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       於 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       於 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       於 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       於 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       於 System.Threading.ThreadHelper.ThreadStart()
在線上手冊找規格書找不到限制,所以只好自己用 Try 的。
目前幾個參數還不確定,但是概略判斷式如下:
圖.寬 x 圖.高 x 色深位元組 須小於 緩衝區上限
色深若用 32 bits 的全彩模式,就是 4 bytes 。
緩衝區上限目前在下列兩個設備測試都是 512 mb (512 x 1024 x1024) ,其他範圍若各位有測試的話,請提供:
Win 2003 std / C2E6400 / DRAM 4 GB / Display RAM 256 MB (share)
Win 2003 ent / C2Q6600 / DRAM 4 GB / Display RAM 512 MB
 
亦即,當:
PictureBox.Width * PictureBox.Height * 4 > 512 * 1024 * 1024 就會發生上面錯誤。
 
各位若有測到不同參數,麻煩在下面回應補一下,以建立規則。
 
註:進階的縮放應該要自己處理 Scorll 捲動,然後用 DrawImage 只將顯示範圍畫在畫面上,並不是調高寬來做縮放。這邊只是偷懶時,規則庫的建立。
廣告
Categories: 技術分享 | 1 則迴響

文章分頁導航

One thought on “[VB2005]PictureBox 的大小限制

  1. 子璉

    WinXP SP2 / P4HT 3 GHz / DRAM 1.5 GB / Display RAM 64 MB (Share)
    也是 512 mb 為上限。

    按讚數

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在WordPress.com寫網誌.

%d 位部落客按了讚: