0

ローカル ネットワーク リソースから大きな画像ファイル (衛星画像) を表示するアプリケーションがあります。画像のレンダリングを高速化するために、画像を小さなパッチ (6 x 6 cm など) に分割し、アプリがそれらを適切にタイル表示します。しかし、衛星画像が更新されるたびに分割前処理を行う必要があり、手間がかかります。

どうすれば元のファイルからパッチをロードできるのでしょうか?

PS 1: LeadTools ライブラリを見つけましたが、オープン ソース ソリューションが必要です。

PS 2: アプリは .NET C# です

編集 1: 形式は重要ではありませんが、現在は JPG です。別のフォーマットに変更することも考えられますが、BMP フォーマットは容量が大きいため、受け入れがたいものです。

4

2 に答える 2

1

string imagePath, Rectangle desiredPortion私はあなたが何を求めているのか100%確信していませんが、オブジェクトに移動する方法を探しているならSystem.Drawing.Image 、おそらく次のようなものです。

public System.Drawing.Image LoadImagePiece(string imagePath, Rectangle desiredPortion)
{
   using (Image img = Image.FromFile(path))
   {
       Bitmap result = new Bitmap(desiredPortion.Width, desiredPortion.Height, PixelFormat.Format24bppRgb);
       using (Graphics g = Graphics.FromImage((Image)result))
       {
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.DrawImage(img, 0, 0, desiredPortion, GraphicsUnit.Pixel);
       }
       return result;
   }
}

パフォーマンス上の理由から、これを複数回呼び出すのではなく、一度に複数の出力画像を作成することを検討することをお勧めします。おそらく、長方形の配列を渡し、画像の配列などを取得します。

それがあなたが求めているものではない場合、あなたはあなたが実際に探しているものを明確にすることができますか?

于 2009-12-08T07:10:30.793 に答える
1

私はあなたの質問に答える美しい試みを書きましたが、私のブラウザはそれを食べました... :(

基本的に私が言おうとしたことは次のとおりです。

1.- Jpeg (およびほとんどの圧縮形式) は順次圧縮を使用するため、必要なビットの前にあるすべてのビットを常にデコードする必要があります。
2.-私が提案するソリューションは、サポートする必要がある各フォーマットで実行する必要があります。
3.- 変更できるオープン ソースの jpeg デコーダが多数あります。JPEG デコーダーは、サイズ 8x8 のピクセル ブロックに変換する (可変サイズの) ビットのブロックをデコードする必要があります。できることは、必要なブロックのみをメモリに保存し、必要がなくなったらすぐに (基本的にはデコードされるとすぐに) 他のすべてのブロックを破棄するようにコードを変更することです。これらのメモリ保存ブロックを使用して、必要なイメージを作成します。
4.- JPEG は 8x8 のブロックで動作するため、8 ピクセルの倍数のサイズのパッチを使用すると作業が簡単になります。
5.- jpeg デコーダーに加えられた変更は、パッチを保存し、完了したらすぐにブロックを破棄する場合、実行中の画像の前処理を置き換えるために使用できます。それは本当に高速で、メモリの消費が少なくなります。

多くの作業が必要であり、考慮すべき詳細がたくさんあることは承知していますが (特にカラー画像を扱う場合)、パフォーマンスが必要な場合は、常に戦いや遊びを終了すると思います (お望みのように) it) バイトと一緒に。

それが役に立てば幸い。

于 2010-01-08T18:16:31.760 に答える