2016-06-17 21 views
-1

イメージボックスに1bppビットマップとしてバイナリファイルをロードしています(ScrollableControlに継承された画像をズームしてパンする機能を備えた私のpicturebox)。私は小さなもので問題はありません。ファイルからバイト配列を読み込み、ビットマップに変換します:は、C#で非常に大きな1bppビットマップを表示します。

Bitmap bmp = new Bitmap(width, height, PixelFormat.Format1bppIndexed); 
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat); 
Marshal.Copy(data, 0, bmpData.Scan0, data.Length); 
bmp.UnlockBits(bmpData); 
this.Image = bmp; 

大きなファイルに関しては、私の問題が始まります。私は20GB以上のサイズのファイルを扱いたい。明らかに私は一度にすべてのファイルをメモリに読み込むことができませんし、イメージボックスに表示する必要があるファイルの一部を読み込む必要があります。私は私の問題を緩和するツール/方法があることを知りたいですか?

+0

[this](http://stackoverflow.com/questions/15512392/how-to-insert-part-of-image-into-picturebox)のようなものですか? –

+0

すべてのピクセルを4Kの画面に表示しても、100MB未満です。 20GBファイルから表示するピクセルを選択します。 – Tommy

+0

@Tommyこれはまさに私があなたを助けてくれることでした。スクロールイベントが発生すると、ファイルの一部を読み込んでImageboxに表示する必要があります。 – elham

答えて

0

Deep Zoomテクノロジの使用を検討することができます。ここには説明がありますhttps://msdn.microsoft.com/en-us/library/cc645077(v=vs.95).aspx

Deep Zoomの要点は、非常に大きな画像ファイルは、非常に大きな画像ファイルを元の画像よりも大幅に小さい多くの「タイル」に分割できることです。 Deep Zoomを使用するクライアントは、元の画像のどの部分がビューポートに表示されていても、Googleマップの仕組みと同様の表示に必要なタイルのみを読み込みます。

関連する問題