問題タブ [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# - PNG に 8 ビットのインデックス付きデータを保存すると、BitmapSource、PngBitmapEncoder/Decoder の使用時に元のバイトが変更される
BitmapSource および PngBitmapEncoder/Decoder を使用して PNG を保存およびロードするときに問題が発生します。基本的に、バイトの配列として作成された画像を保存し、PNG がプログラムにロードされたときに、まったく同じバイトをリロードできるようにしたいと考えています。元データの保存は重要です。
同時に、PNG でカスタム パレット (256 色のインデックス付き配列) を使用したいと考えています。
カスタム インデックス パレットを使用して 8 ビット データを保存しようとしています。元のデータの範囲は 0 ~ 255 です。パレットは「しきい値」パレットの場合があります (たとえば、0 ~ 20 は色 #1、21 ~ 50 は色 #2 など)。
私が見つけたのは、データを保存し、リロードし、CopyPixels を実行して「生」データを取得すると、元のバイト配列値ではなく、パレットに基づいてデータ値が設定されることです。
カスタム パレットを失うことなく、PNG 内の元のバイト配列を保持する方法はありますか? または、BitmapSource からバイト配列を取得する別の方法はありますか?
以下は私の保存ルーチンです:
そして、これは私のロードルーチンです:
任意の提案をいただければ幸いです。ありがとう。
補遺 #1: PNG を Indexed8 に設定し、256 エントリのカラー パレットを使用しているにもかかわらず、PNG が 32 ビット カラーとして保存されていることが問題の一部であることがわかりました。これも設定されているパレットに依存するようです。理由はありますか?
wpf - Libtiff.net を使用して BitmapSource を Tiff エンコード JPEG として保存する
LibTiff.net を使用して、WPF BitmapSource を JPEG エンコードされた TIFF として保存するルーチンを作成しようとしています。LibTiff で提供されている例を使用して、次のことを思いつきました。
これで画像が変換され、JPEG 画像が表示されますが、色がめちゃくちゃです。TIFF のタグが 1 つか 2 つ欠けているか、Photometric の解釈のような何かが間違っていると思いますが、何が必要か完全に明確ではありません。
乾杯、
c++ - BitmapSourcecopyPixels正しい引数
私が使用したストライドは例外を生成します。どのストライドが正しいのかわかりません。入力画像は32ビットJPGです。どの値を入力する必要があるか教えてください(私は多くのことを試しましたが、例外や破損したJPGを生成する場合):
c# - 画像をクリップボードに追加
機能を持つサードパーティコントロールChart
がありCopyToClipboard(size)
ます。同じメソッドも返さBitMapSource
れます。
だから私の必要性は次のとおりです。別のBitMapSource
ものをクリップボードに追加します。この機能を実現するにはどうすればよいですか?.
これら 2 つの画像の類似性は、幅が同じで高さが異なる場合があります。私は別の下に追加する必要があります。
c# - WPF で、2 つのボタン間で同じ画像リソースを共有できますか
WPFでオン/オフボタンを作成したいのですが、ユーザーがクリックしたときに外観を変更したいです(オンの場合はオフに、オフの場合はオンに切り替えます)。使用したい画像をリソースに追加しました。
イベントコードは、「フラグ」は真として初期化されるブールローカル変数です。
ここで、同じように動作する 2 つのオン/オフ ボタンを作成する必要があります。2 番目のボタンに同じリソースを使用しようとすると、例外が発生しました。
2 番目のボタンで同じ画像リソースを使用できますか? それとも、別のキーを持つリソースとして画像を再度追加する必要がありますか?
wpf - 画像の非同期データバインディング、クロススレッド例外が発生します
WPFアプリケーションに問題があります。グリッドビューの画像フィールドを、ビューモデルのimageプロパティとデータバインドしようとしています。
IsAsyncを使用しなくても、これは問題ありません。ただし、ロードする画像が多く、Webサービスからロードする必要があるため、非同期で実行したいと思います。
Imageプロパティのコードはこれです。これは、Webサービスを呼び出すハンドラーdllを呼び出すだけです。
ただし、IsAsync = trueを追加するとすぐに、フォームが読み込まれると、次の例外が発生します。
The calling thread cannot access this object because a different thread owns it.
私はWPFにまったく慣れていません。非同期がtrueに設定されている場合、WPFはスレッド自体を処理すると思いました。データバインディングで、どういうわけか呼び出す必要がありますか?もしそうなら、一体どうやってこれを行うのですか?
c# - BitmapSourceの四隅のピクセルを読み取る方法は?
.NETBitmapSourceオブジェクトがあります。ビットマップの隅にある4つのピクセルを読み取り、それらすべてが白よりも暗いかどうかをテストしたいと思います。どうやってやるの?
編集:このオブジェクトをより優れたAPIを使用して別のタイプに変換してもかまいません。
c# - BitmapSource.Create()メソッドのDPIの関連性は何ですか?
DPIに関するウィキペディアの記事を読みましたが、さらに混乱しました...画像にDPI情報がありません。BitmapSource.Create()でどのDPIを使用する必要がありますか?定数(96/72)を使用しても大丈夫ですか?画像を印刷しないかどうかは本当に重要ですか?
c# - C# WPF でトリミングされた画像のアプリケーション メモリを削減する
元のビットマップから新しい CroppedImage を作成することにより、WPF アプリケーションでトリミングされた画像を表示しています。しかし、アプリケーション メモリを見ると、トリミングされた画像を表示する場合と、元の画像を表示する場合は同じです。CroppedImage は元のビットマップへの参照を保持しているため、これはおそらくそれほど奇妙ではありません。しかし、元のビットマップを参照せずにトリミングされた画像を新しいビットマップ画像として作成し、それを行うことでアプリケーションメモリを削減することは何とか可能ですか?
これを行う方法のいくつかのコードは高く評価されます。
手伝ってくれてありがとう!
[編集] トリミングされた画像を作成するためのコードは次のとおりです。
wpf - BitmapSource からの BitmapImage は常に Bgr32
BitmapSource から BitmapImage をロードしていますが、BitmapImage のフォーマットが BitmapSource の Bgra32 ではなく Bgr32 であることが常にわかります。ここに同様のスレッドがあります: BitmapImage from file PixelFormat is always bgr32
しかし、スレッドで提案されているように、 BitmapCreateOptions.PreservePixelFormat を使用してもうまくいきませんでした。ここに私がやっていることがあります:
BitmapSource から BitmapImage を作成し、アルファ チャネルを維持する方法はありますか?
更新: 他のスレッドに投稿された同じコードを使用してファイルから testbmp2.bmp をロードしました。ロード後、Format プロパティは Bgr32 です。
だから多分私は FileStream/MemoryStream を正しく保存していませんか? FileStream を保存した後、Photoshop で testbmp2.bmp を開いてアルファ チャネルを確認できるため、これは正しくないようです。
更新 2: 私が抱えている問題を言い直す必要があると思います。テクスチャの個別のチャンネルを表示しようとしています。Image コントロールを介してビットマップを表示しています。チャネル ベースのユーザー入力をマスクする Image の Effect プロパティに割り当てられた単純な HLSL コンパイル済みシェーダーがあります。アルファ チャネルを保持しながら BitmapSource を BitmapImage に取得できないことは、問題の一部に過ぎませんでした。元の BitmapSource の Format は Bgra32 だったので、それを Image の Source プロパティに直接割り当てることができることに気付きました。問題は、Image オブジェクトが事前に乗算されたアルファを持つテクセルのみを表示することです...? ここに私のシェーダーコードがあります:
私はそれをかなり広範囲にテストしましたが、outCol 値が適切に設定されていることを確信しています。(1.0, 1.0, 1.0, 0.0) のチャネル マスク値を渡すと、表示されるイメージは RGB チャネルで、アルファの領域が黒く描画されます。 RGBチャンネルに。事前に乗算されたアルファなしで Image に BitmapSource を表示する方法を知っている人はいますか? もっと言えば、アルファの事前乗算が発生する前にエフェクトにテクスチャを受け取る方法はありますか? どのような順序で処理が行われるかはわかりませんが、テクスチャが s0 レジスタに書き込まれ、シェーダーが処理を開始する前に事前乗算が行われるようです。