Bitmap.Clone()とnew Bitmap(Bitmap)の違いは何ですか?
2023-09-02 20:39:35
質問
私の知る限り、ビットマップをコピーする方法は2つあります。
Bitmap.Clone()を使用する。
Bitmap A = new Bitmap("somefile.png");
Bitmap B = (Bitmap)A.Clone();
新しいBitmap()
Bitmap A = new Bitmap("somefile.png");
Bitmap B = new Bitmap(A);
これらのアプローチはどのように違うのでしょうか?特にメモリとスレッドの面での違いに興味があります。
どのように解決するのですか?
これは "deep" と "shallow" のコピーに共通する違いであり、また、ほとんど非推奨の IClonable インターフェイスの問題でもあります。 Clone() メソッドは新しいビットマップオブジェクトを作成しますが、ピクセルデータは元のビットマップオブジェクトと共有されます。 Bitmap(Image) コンストラクタも新しい Bitmap オブジェクトを作成しますが、ピクセルデータの独自のコピーを持つオブジェクトです。
SOでのClone()についての多くの質問は、プログラマがビットマップの典型的なトラブル、それがロードされたファイルへのロックを回避することを望んでいるところです。 そうではありません。 おそらく実用的な使用法は、渡されたビットマップの Dispose() を不適切に呼び出すライブラリ メソッドとのトラブルを回避することです。
オーバーロードは、ピクセルフォーマット変換またはクロッピングオプションを利用することで、有用である可能性があります。
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] \0-9]よりも効率が悪い
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] git branch、fork、fetch、merge、rebase、cloneの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み] 2つのリストを結合する
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
ファイルから画像を開き、ロックを解除する?