- - PR -
PictureBoxサイズ変更にて例外発生しました
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-14 10:40
こんにちは。よろしくお願いします。
PanelにPictureBoxをAutoScrollをONにして画像を表示させています。 画像を拡大させるために、 pictureBox.WidthとpictureBox.Heightに、倍率をかけてRefresh()しますと、例外が発生してしまいます。 画像サイズ×800%とか1600%とか大きいサイズになったときに発生するようです。 try/catchでそこをくくってDEBUG上で例外取得出来ますが製品にすると、例外が取得出来ず以下の例外が発生してしまいます。 ************** 例外テキスト ************** System.ComponentModel.Win32Exception: この操作を正しく終了しました。 at System.Windows.Forms.DibGraphicsBufferManager.CreateCompatibleDIB(IntPtr hdc, IntPtr hpal, Int32 ulWidth, Int32 ulHeight, IntPtr& ppvBits) at System.Windows.Forms.DibGraphicsBufferManager.CreateBuffer(IntPtr src, Int32 offsetX, Int32 offsetY, Int32 width, Int32 height) at System.Windows.Forms.DibGraphicsBufferManager.AllocBuffer(Graphics targetGraphics, IntPtr targetDC, Rectangle targetBounds) at System.Windows.Forms.DibGraphicsBufferManager.AllocBufferInTempManager(Graphics targetGraphics, IntPtr targetDC, Rectangle targetBounds) at System.Windows.Forms.DibGraphicsBufferManager.AllocBuffer(IntPtr target, Rectangle targetBounds) at System.Windows.Forms.Control.WmPaint(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 結局、バッファが足りないから出来ないのでしょうか。 御教授頂けると助かります。 お忙しいところすいませんがよろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-06-14 14:47
はじめまして、深山です
まず足りないのは、フォチュヒロさんが実行している環境(コードや画像サイズ含む)の提示ではないでしょうか? 例外テキストだけでは、推測の域を超えないと思いますよ。 | ||||||||||||
|
投稿日時: 2006-06-14 15:02
はじめまして。RESありがとうございます。
そうでした。環境記載するの忘れてました。 こちらの環境は、 開発環境:Microsoft Visual Studio .NET 2003Pro 言語:C# OS:WinXP Pro CPU:P4(1.4G)x2 MEMORY:2G です。 .NET Frameworkを使用した開発を行なっております。 画像サイズは、1600x1200のIMAGEを表示させています。 これを16倍して this.pictureBox_aaa.Width = width; this.pictureBox_aaa.Height = height; pictureBox_YuvDisp.Refresh(); とすると例外が発生します。 | ||||||||||||
|
投稿日時: 2006-06-14 16:49
今回、提示されたエラーやメモリ不足の場合は、
とすることで、取得出来ると思います。
上記のコードでは、pictureBox_aaaとpictureBox_YuvDispの関係が分からないのですが、 両方のPictureBoxをAutoSizeに設定してますか? pictureBox_aaaをAutoSizeに設定していない場合、Win32Exceptionの例外が起こると思います。 [ メッセージ編集済み 編集者: 深山 編集日時 2006-06-14 16:54 ] [ メッセージ編集済み 編集者: 深山 編集日時 2006-06-14 16:58 ] | ||||||||||||
|
投稿日時: 2006-06-14 17:31
申し訳ありません。
--------------------------------------------------------- this.pictureBox_aaa.Width = width; this.pictureBox_aaa.Height = height; this.pictureBox_aaa.Refresh(); --------------------------------------------------------- の間違いです。 pictureBox_aaaをAutoSizeに設定していません。 AutoSizeにすると、PictureBox のサイズが、格納しているイメージと同じ大きさになってしまうためです。 仕様としましては、PictureBoxのサイズ変更にて、画像が拡大されスクロールバーが表示しようとしています。 もとネタは、 件名:PictureBoxの描画範囲について 投稿日時: 2005-07-26 02:17 にあるのを参考にしました。 pictureBoxをDockFullにはしていませんが。 | ||||||||||||
|
投稿日時: 2006-06-14 20:09
原因としては、Refresh()が原因ではなく、PictureBoxのサイズが大き過ぎるため、 .NET Frameworkの処理内でエラーが起きているのだと思います。 拡大したピクチャーをファイル出力するのでなければ、 分割して拡大してはどうでしょう? | ||||||||||||
|
投稿日時: 2006-06-15 09:24
大変参考になります。
こちらも内部エラーと認識しています。 「分割して拡大」は避けたいと思っております。 PDFのように、クリックで画像をつかんでスライド移動する仕様を入れ込んでありますので、表示がちらつくのが懸念されるためであります。 「拡大したピクチャーをファイル出力する」について、 もう少しお聞きして宜しいでしょうか。 お忙しいところすいませんが宜しくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-06-15 10:09
画像はBitmapクラスで保持して,PictureBoxに必要なところだけをGraphicsクラスで描画したらどうでしょうか。
スクロールバーが出ませんが,これは自分でコントロールを配置すればよいと思います。 |