問題タブ [lockbits]

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.

0 投票する
4 に答える
7238 参照

c# - ロックビットより高速な画像処理

私は C# でエッジ検出プログラムに取り組んでおり、より高速に実行するために、最近、ロック ビットを使用するようにしました。ただし、lockBits はまだ実行したいほど高速ではありません。問題は私の一般的なアルゴリズムかもしれませんが、画像処理に使用できる lockBits よりも優れたものがあるかどうかも疑問に思っています。

問題がアルゴリズムである場合、ここに基本的な説明があります。色の配列 (ピクセルを表すロックビットを使用して作成) を調べ、各色について、そのピクセルの周囲の 8 つのピクセルの色を確認します。これらのピクセルが現在のピクセルと十分に一致しない場合は、現在のピクセルをエッジと見なします。

ピクセルがエッジかどうかを定義する基本的なコードを次に示します。9 つの色の Color[] を受け取ります。最初の色はチェックするピクセルです。

このコードはすべてのピクセルに適用され、その色はロックビットを使用して取得されます。

基本的に、問題は、どうすればプログラムをより速く実行できるかということです。それは私のアルゴリズムですか、それともlockBitsよりも高速に使用できるものはありますか?

ちなみに、プロジェクトはgitHubにあります、こちら

0 投票する
1 に答える
591 参照

c# - C# - バイトからの BMP の作成

ファイル内のいくつかの 24 ビット ビットマップを「盗聴」するために使用できる C# で WinForm アプリケーションを作成しています。そのオフセット、ファイルへの書き込み方法に関する分析、およびその長さなどの情報を既に収集しました。

したがって、ファイルに関する詳細情報は次のとおりです。

  • BMP データが逆に書き込まれます。(例: (255 0 0) は (0 0 255) と書きます)
  • BMP ヘッダーはありません。BMP の画像データのチャンクのみ。
  • PixelFormat は 24 ビットです。
  • その BMP は純粋なマゼンタです。(RGB で 255 0 255)

私は次のコードを使用しています:

この出力が得られます。その理由は、次の行にヒットするたびにバイトがめちゃくちゃになっているためだと思います。(255 0 255 が 0 255 255 になり、255 255 0 になるまで続きます)

出力

これを修正するのを手伝ってくれることを願っています。事前にどうもありがとうございました。

解決策 このコードを追加することで修正されました(私の友人の助けとJames Holdernessから提供された情報を利用して)

どうもありがとうございました!

0 投票する
4 に答える
8198 参照

visual-studio-2012 - Visual Studio 2012 - vshost32-clr2.exe が機能しなくなった

Visual Studio 2012 を使用して C# で WinForm アプリケーションを作成していますが、デバッグ時にエラーが発生します。

既に検索しましたが、ほとんどの結果は Visual Studio 2010 以前のものであり、Visual Studio 2012 には適用できないと思われる同様のソリューションが得られます。

ソース :アンマネージ DLL を呼び出すと vshost32.exe がクラッシュする

追加の詳細 :

  • 私のプロジェクトでは DLL を使用していません。

  • 私のプロジェクトで進行している限り、幅が17の場合にのみ発生します。

次のコードを使用します。

そのような値がメソッドに設定されている場合にのみ発生するため、コードを投稿する必要があると思います。

この問題の解決にご協力いただければ幸いです。事前にどうもありがとうございました!

0 投票する
2 に答える
4449 参照

c# - ロックビット C# によるエッジ検出

エッジ検出アルゴリズムを実装するプログラムを作成しましたが、処理に時間がかかります。getpixel と setpixel の代わりに lockbits と unsafe state を使用することについて読んだことがありますが、まだ使用方法がわかりません。

これは私のコード例です:

次のように実装する fastbitmap クラスを使用しています。

でも、イメージは全く変わりません。コードのどの部分が間違っているかアドバイスをいただけますか?

0 投票する
1 に答える
6240 参照

c# - Unlocked Bitmap アンマネージ メモリ (Scan0) を直接読み書きする

ロックされていないビットマップ アンマネージ メモリから直接読み書きしてもよろしいですか?

Bitmap の UnlockBits 後、BitmapData を使い続けることはできますか? 別のスレッドが同じビットマップにピクセルを書き込んでいる間に、マウス位置で PictureBox のビットマップのピクセルを読み取ることができるテスト アプリを作成しました。

編集 1:Boing彼の回答で指摘されているように、「Scan0 は Bitmap オブジェクトの実際のピクセル データを指していません。むしろ、Bitmap オブジェクトのピクセル データの一部を表す一時バッファを指しています。」MSDNから。

しかし、Scan0 を取得すると、Lockbits や UnlockBits を必要とせずに Bitmap を読み書きできるようになります。私はこれをスレッドで何度もやっています。MSDN によれば、Scan0 は Bitmap データの COPY を指しているため、これは発生しないはずです。C# では、すべてのテストでコピーではないことが示されます。C++ では、正常に動作するかどうかわかりません。

編集 2:回転メソッドを使用すると、OS がビットマップ ピクセル データのコピーを解放することがあります。結論、it is not safe to read/write an unlocked Bitmap Scan0。Boing さん、回答とコメントをありがとうございます。

以下は、BitmapData を取得し、ピクセル値を読み書きする方法です。

0 投票する
1 に答える
4946 参照

c# - C# でロック ビットを使用してイメージに書き込む

私が取り組んでいるプログラムの最適化に取り組んでいます。現在、ロック ビットを使用してバイト データを読み取りますが、setPixel を使用してピクセル データを書き込みます。では、読み込んでいるピクセル データを実際に変更するにはどうすればよいでしょうか。pp、cp、または np を設定しようとすると、メソッドが機能しません (ループし、ピクセル データを表すために pp、cp、および np が必要になるため)。ピクセル データを byte[] に書き込んで操作する必要がありますか、それとも何ですか?

コードサンプルは次のとおりです。

0 投票する
1 に答える
854 参照

c# - LockBits() は、2 番目のモニターで四角形を使用すると ArgumentException をスローします。

選択したモニターに生成されたテスト画面を表示する必要がある小さなアプリケーションに取り組んでいます。これらの画面をビットマップとして生成しています。生成を簡単かつ迅速にするために、LockBits() メソッドを使用してこれらのビットマップを生成しています。

この 2 番目のモニター用に生成されたビットマップで LockBits を実行しようとすると、問題が発生します。

プライマリ モニターの境界から取得した四角形を使用して生成されたビットマップで LockBits を実行している場合、この同じコードは正常に動作しますが、四角形が 2 番目のモニターの境界によって定義されている場合は ArgumentException がスローされます。関連する四角形のメンバーは次のとおりです。

私の最初の考えは、負の X 値が LockBits で問題を引き起こしている可能性があるということですが、X 値を X の絶対値に置き換えると、同じ例外が発生します。もちろん、これは四角形が無効なパラメーターであると想定していますが、プライマリ モニターから生成された四角形は正常に動作するため、LockBits が気に入らないのは 2 番目のモニターの境界に関する何かであるに違いないと思います。

アドバイスをよろしくお願いします。