問題タブ [bitmapsource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# プロジェクト リソースからイメージ ソースを取得すると、メモリ リークが発生する
私のプロジェクト リソースには、いくつかの画像 (.png) があります。ユーザーがButton
新しい画像をクリックすると、ImageBox
. すべての画像がプロジェクト リソースに保存されているため、Image.Source
コードで取得する必要があります。私はMethod
このようなを使用してそれを行うことができました:
私のアプリでは、すべて正常に動作します。エラーも警告もありません。 を押すたびに画像が変化しButton
ます。メモリを監視した後、メモリを呼び出すたびに、毎回getBitmapSourceFromBitmap
100MBが爆発することに気付きました。なぜこれが起こっているのか誰にも分かりますか?私の英語でごめんなさい。
c# - WriteableBitmap を使用した Userdefined BitmapSource
16 ビットのグレー値を保持する DICOM 画像データがあります。データを視覚化するには、16 ビット値の一部を切り取るウィンドウ メソッドを適用する必要があります。したがって、WindowCenter と WindowWidth のような 2 つのプロパティがあります。
WPF メカニズムを使用したいので、BitmapSource から派生する DicomImage クラスを作成することにしました。BitmapSource は内部ピクセルデータに直接アクセスできないため、WindowCenter と WindowWidth が変更されるたびにデータを操作できるプライベート WriteableBitmap (InternalImage) メンバーを作成しました。
結果を確認するには、Image.Source = DicomImage にアタッチすると、画像が表示されます。しかし、WindowCenter/WindowWidth を変更しても、画像は更新されません。WriteableBitmap を直接アタッチすると (Image.Source = InternalImage)、すべて正常に動作します。
私は何を間違っていますか?
ありがとうマルティ
c# - 透明度のあるファイルのサムネイル画像を取得する
透明度のあるファイルのサムネイルを取得したい。
私はそれを達成するために次のコードを持っています:
私はここからコードを混ぜました:
BitmapSource と Bitmap の間で変換する良い方法はありますか? System.Drawing.Bitmap から WPF BitmapImage
をロードします。
このようにして、ビットマップに変換BitmapSource
してから、ビットマップを に変換しBitmapImage
ます。透明度を保存しながらBitmapSource
直接変換する方法があると確信しています。BitmapImage
c# - C++/CLI でネイティブ バッファから RGBA イメージを作成して表示する
RGBA イメージを含むネイティブ char* バッファがあります。問題は、Windows スタイルの ARGB ではなく、実際の RGBA 形式であることです。(BGRAの略、後方)
オブジェクトは、コピーせずにバッファから作成する必要があります。
BitmapSource::Create Method (Int32, Int32, Double, Double, PixelFormat, BitmapPalette, IntPtr, Int32, Int32) System BitmapSource
:: Drawing::Bitmap
を試しました、残念ながら、ウィンドウの ARGB 形式のみをサポートしているようで、「通常の」RGBA はサポートしていません。
ここでDeleteObject(BitmapSource ^ )
、使用しているバッファを解放する関数が必要です。オブジェクトの使用後に呼び出す必要があります。
Bitmap を使用すると、非常に簡単です。
BitmapSource (または RGBA を使用する他のもの) で同様のことをしたいと思います。
BitmapSource
バッファを安全に解放するにはどうすればよいですか?
の基になるバッファを取得するにはどうすればよいBitmapSource
ですか?
RGBA バッファー (Windows スタイルの ARGB ではなく、実際の RGBA) を使用して表示できる他の C# オブジェクトを使用してもかまいません。
c# - BitmapSource.Create スイッチの RGB 値
次のコードを使用して、ファイルからバイト配列にピクセルをロードしています。
これは問題ではないと確信しています。ファイルを読み込んだ後、色を操作して表示し、WPF ウィンドウに表示したいと考えています。
そこで、次の行でビットマップ ソースを作成します。
問題は、赤のバイトが緑のバイトと入れ替わることです。これは似ています - BitmapSource を PixelFormat.Format48bppRgb の Bitmap に保存すると色が変わるのはなぜですか? -しかし、私はそれを修正する方法がわかりません。
c# - ポインターを使用した BitmapSource アクセス
BitmapImage
C# ポインターを使用してオブジェクトの基になるメモリにアクセスする方法はありますか?
メソッドがあることは知っていCopyPixels
ますが、ピクセル配列のコピーを新しい配列に作成します(メモリ要件が重複しています)。大きな画像 (2 GB) を開くと、多くの役に立たないものが割り当てられます。また、CCLA のようなある種の精緻化を実行したい場合は、膨大な量のメモリが必要です。
ピクセル配列を読み取るだけです。
でできるように、ピクセルを直接アドレス指定することは可能System.Drawing.Bitmap
ですか?
の高速ビットマップ アクセスを作成しましSystem.Drawing.Bitmap
たが、WPF を使用しているため、 にも同じ機能が必要ですBitmapSource
。それ以外の場合は、イメージの読み込みを複製する必要があります (古い方法のビットマップとBitmapSource
WPF でイメージを表示する) には、多くのメモリと時間がかかります。
ありがとうロレンツォ
c# - BitmapSource.Create は、イメージ データの 2 つのコピーを作成します
多数の画像を処理するアプリケーションを用意します。メモリ フットプリントは、予想されるサイズの約 2 倍です。
以下に示すようにコードを整理しました。_source は、スコープ内に留まるインスタンス変数です。
これを ANTS メモリ プロファイラーを介してフィードすると、BitmapSafeMIHandle が割り当てられ、メモリ使用量が実行されるたびにビットマップのサイズの約 2 倍になることがわかります。
私は何をしていないのですか?私はこれと一緒に暮らす必要がありますか?すべての情報をいただければ幸いです。
乾杯、ナイジェル