問題タブ [bitmapencoder]
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# - TiffBitmapEncoder: ビットマップ エンコーディングを非同期にする
問題:tiff
ビットマップ イメージ (ファイルに積み重ねられた複数のイメージ) をメイン スレッドに対して非同期に保存/圧縮するにはどうすればよいですか?
私の設定: (同期的で動作が遅い解決策: 圧縮が実行されると、スレッドは数秒間スタックしたままになります。これを行う余裕はありません。)
私が試したこと:圧縮(呼び出しencoder.save(fs)
)をメインスレッドとは別のスレッドで実行したいと思います。
encoder.save(fs)
エンコーダーを予防的にローカルバージョンにコピーしてから呼び出しを行う呼び出しを入れようとしました BackgroundWorker
(ただし、機能するかどうかはわかりません)。「別のスレッドが所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません」のようなエラーが表示されます。
を使用するとDispatcher.Invoke
(正しく実行した場合)、実行が再び非常に遅くなります。
私は愚かな間違いを犯していますか?
EDIT:(@ meilkeと@ user7116の提案に従って進行中の作業)
圧縮プログラムの割り当てと実行を に移動しましたBackgroundWorker
。渡された今colorBitmap
は、別のスレッドに所有しています。試してみましfreeze
たが、十分に見えません。「別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません」というメッセージが引き続き表示されます。
c# - TiffBitmapEncoder、C#/WPF でメモリ不足例外を引き起こすメモリ バグ
TiffBitmapEncoder を使用して TIFF 画像に変換することで、数百の BitmapSources を保存している WPF アプリケーションがあります。ただし、この奇妙なメモリ消費があり、メモリ不足の例外がスローされることがよくあります。
ノート:
- 8GBのRAMがインストールされています。
- 画像サイズは 10x10 から 300x300 ピクセル (非常に小さい) までさまざまです。
動作するコードは次のとおりです。
そして、これが私の記憶のスクリーンショットです。
ここで、BitmapSource を (1 回でも) 複製すると、この巨大なメモリ割り当てが発生し、メモリ不足の例外が発生します。
これは、2 番目のコード サンプルの私の記憶のスクリーンショットです。
これを引き起こしている可能性のあるものと、それを修正する方法を知っている人はいますか?
違いは、最初の例の BitmapSource が画面にレンダリングされ、2 番目の例ではレンダリングされていないことです。私の疑いでは、これは GPU と Dispatcher に関係している可能性があります。これは変換を加速するハードウェアである可能性がありますが、2 つ目は何らかのバグがある CPU で行われます...
試した:
- 運がなかっ
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true);
た後に電話をかけてみましたSaveBitmapSource()
c# - C# ビデオ ストリームを画像ファイルとして保存する
c# を使用してビデオ ストリームを画像ファイルとして保存することはできますか?
1 つのファイルを簡単に保存できますが、ストリームについていくことができません。パフォーマンスなどを改善するために、ディスクに書き込む前に何らかの方法でビットマップをキャッシュできるかどうか疑問に思っています
c# - BitmapFrame.Create はこのオブジェクトにアクセスできません
BitmapSource
複数の画像を png ファイルにエクスポートしようとしています。これが私のコードです:
スレッド呼び出し:
関数:
そうするとき、私はAdditional information: The calling thread cannot access this object because a different thread owns it.
オンラインで受け取っています:var bitmapFrame = BitmapFrame.Create((BitmapSource) currentImage);
私は何が欠けていますか?
c# - PixelBuffer.AsStream() メソッドは廃止されましたか?
MSライブラリをチェックしていました。
PixelBuffer.AsStream()
ユニバーサルアプリの開発には時代遅れのようです。
VS2015 Community バージョンで Win10 (ビルド 10240) を使用しています。
私は何かが恋しいですか?
さらに、バイト配列または整数配列から WriteableBitmap にストリームをエンコードまたは書き込む最良の方法は何ですか?
BitmapEncoder のメソッドを試していましたが、次の方法でしか作成できませんでした。
その後、WriteableBitmap に表示される変更はありませんでした。それ以外の場合、フレームワークは例外をスローしていました(私のコードの外側)
デコーダーは正常に動作し、すべてのピクセルが適切にデコードされ、byte[] sourcePixels 配列にストリーミングされました。
c# - BitmapEncoder フラッシュが Argument Exception をスローする
UWP アプリケーションで画像のサイズを変更しようとしています。ほとんどの場合、追加されたコードは機能しますawait encoder.FlushAsync();
が、ArgumentException
.
MSDN ( https://msdn.microsoft.com/en-us/library/windows/apps/windows.graphics.imaging.bitmapencoder.bitmaptransform.aspx ) にアクセスしたところ、(「備考」で) 教えてくれました。 :
BitmapTransform メンバーを使用して、インデックス付きのピクセル形式で格納された画像をスケーリングしようとすると、FlushAsync は HRESULT WINCODEC_ERR_INVALIDPARAMETER で失敗します。代わりに、GetPixelDataAsync を使用してスケーリングされたピクセル データを取得し、SetPixelData を使用してエンコーダーに設定する必要があります。
私はそれをやろうとしました.2つのコメント行を見てください(繰り返しのために私にはどういうわけか間違っているように見えます). 2行目(私がしようとしているところSetPixelData
)で、エンコーダーは私にbuffer allocated not sufficient
例外を与えます。
この問題を引き起こす画像の例: http://www.spiegel.de/images/image-1028227-hppano-lqbn.jpg . 単体テストはこちら: https://github.com/famoser/OfflineMedia/blob/master/Famoser.OfflineMedia.UnitTests/Presentation/ImageResizeTest.cs
どうすれば回避できArgumentException
ますか?画像が「インデックス付きピクセル形式」であることを確認するにはどうすればよいですか? また、この形式のサイズを変更するにはどうすればよいですか?
c# - BitmapEncoder の保存はサポートされていません
私は次のコードを持っていますが、何も問題がありません。問題が何であるかについてのアイデアはありますか?
実行するとスローされます
System.NotSupportedException が発生しました HResult=-2146233067
Message=指定されたメソッドはサポートされていません。ソース=PresentationCore
StackTrace: System.Windows.Media.Imaging.BitmapEncoder.Save(ストリーム ストリーム) で FileFormatters.Export.SaveImage(BitmapFrame データ、ストリーム saveStream) で
内部例外: null
MSDNページには
NotSupportedException : エンコーダーに渡される Frames 値が null です。
NotSupportedException : フレーム数がゼロ以下です。
ただし、フレーム数は 1 であり、データは null ではありません
詳細情報