問題タブ [boost-gil]
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++ - Boost.GILで画像を作成する
私はboost::gilのドキュメントを読もうとしてきましたが、不足しているか、複雑であるかの間のどこかにあります.
暴言はさておき、次のことを行う方法の例が必要です。
たとえば、512x512 の画像を作成します。赤のピクセルで塗りつぶします。PNG に書き込みます。
gil のドキュメントには、それを行うことについて何も見つかりません。特に、画像の作成またはピクセル部分での塗りつぶし。
誰かが助けてくれたら、ありがとう。
c++ - ブースト::GILbits8*をreinterpret_castなしでgray8_ptr_tに?
GILの設計ガイドラインに従って作業しようbits__
として、チャネルデータ型に使用します。GIL画像ビューにラップしている外部データがあることがよくあります。ただし、bits__
データポインターの型を使用している場合でも、画像ビューを作成する前にreinterpret_castを追加する必要があります。次のコードを取ります
6行目でエラーが発生します"エラーC2440:'初期化中':'boost :: gil ::bits8*'から'boost:: gil::gray8_ptr_t'に変換できません1>ポイントされたタイプは無関係です;変換にはreinterpret_castが必要ですCスタイルのキャストまたはファンクションスタイルのキャスト」
私ができる限りソースコードを掘り下げてみると、これらのタイプは実際には無関係のようです。ビット8は単なる。ですunsigned char
がgray8_ptr_t
、へのポインタstruct pixel<bits8,gray_layout_t>
です。この構造体の唯一の要素は単一のbits8であるため、reinterpret_castは安全に見えます。それは私がそれに投げたテストのためにもうまく働きます。
ただし、外部データを画像ビューにラップすることがよくあり、すべての場所にreinterpret_castを配置すると問題が発生します。GILで使用するピクセルポインターを作成するより安全な方法はありますか?
現在の回避策:
c++ - Boost::GILビュータイプからチャンネルタイプを抽出する方法は?
画像ビューからピクセルまたはチャネル タイプを抽出する正しい方法が見つかりません。gray8_view_t の場合、以下の pod_t を「unsigned char」に定義しようとしています。単純な ViewType::pixel_t はありません。関数 PixelFoo でのこの型の適切な定義は何ですか?
c++ - boost :: gilを使用して数値ピクセル演算のオーバーフローを処理する方法は?
boost :: gilの数値拡張子には、次のようなアルゴリズムが含まれています。
2つのuint8チャネル値で埋められた場合、ChannelRもuint8の場合、オーバーフローが発生します。
計算はすべきだと思います
- 処理に別のタイプを使用します(テンプレート化されたチャネルタイプからこれを導出する方法は?)
- 結果をChannelRタイプの範囲にクリップして、飽和した結果を取得します(
boost::gil::channel_traits<ChannelR>::min_value()
/ ...max_value()
?を使用)
パフォーマンスを最適化した結果を可能にする方法でこれを行うにはどうすればよいですか?
- 可能な限り最大のタイプに変換しますか?逆効果に聞こえます...
- テンプレートの専門分野の武器を提供しますか?より良いアイデアはありますか?
c++ - Boost ::GIL画像をJPEGまたはPNGとしてchar*に保存する方法は?
そのため、ファイルに保存する際のサンプルがいたるところに見られます。しかし、ファイルの代わりにchar *またはstringに保存することは可能かどうか疑問に思います。つまり、メモリに保存することはできますか?
c++ - Reading png images with gil
Is it possible with boost::gil
to read the RGB image information so that I can read the file into the correct rgbx_image_t
?
With the following I have to know the type beforehand and that is not so neat.
#xA;visual-c++ - lpng パッケージのリンク方法
VC++、boost::gil パッケージ、lpng パッケージを使用して png 画像を読み取ります。デバッグ後、次のリンクの問題があります。
それはどのように由来しますか?問題をリンクするにはいくつかのライブラリが必要ですか?
c++ - Boost.GIL を使用して画像を「生の」バイトに変換する
ゴール
私はBoost GILに移行して、私が実装した同様の機能を置き換えようとしていますが、これは保守可能な寿命の終わりに近づいています。
を使用して 24 BPP、8 ビット RGB 画像で動作する既存のコードがありますuint8_t*
。同じインターフェイスを使用してさまざまな場所 (OpenGL バッファーなど) から画像を公開しているため、これを変更することはできません。また、既にかなり多くのコードが存在します。
したがって、ファイルを読み取り、ストレージの管理に使用できる にピクセルをバイト単位でコピーすることから始めて、GIL を小さなステップで使用しようとしていますstd::vector<uint8_t>
が、それでも をuint8_t*
使用して を取得し&vector[0]
ます。
これは、リファクタリングが理にかなっているポイントになるまで、既存のインターフェイスの背後に透過的にドロップできます。
私が試したこと
copy_pixels()
これは、適切に構築された 2 つのビューを使用する単純なケースであると考えました。
ドキュメントを調べて試してみることで達成できたことの合計を示す、最小限の完全な例をまとめました。
私が立ち往生している場所
これはコンパイルされません:
これは一目瞭然です。RGB ピクセルは、unsigned char
自動的に単一のピクセルに変換することはできません。を使用してこれを修正しようと思いましたが、これらの変換でcopy_and_convert_pixels()
3:1 (つまり、ソース イメージの各ピクセルの出力に 3 つの s がある) の問題を回避する方法がわかりません。unsigned char
変換は、色空間の変換 (例: RGB->HSV) またはパッキングの変更を目的としているようです。
visual-c++ - libpngを使用してpng画像を読み取るにはどうすればよいですか?
メインプログラムでは、png 画像を読みたいと思っています。デバッグは問題ありません。しかし、実行可能ファイルを実行すると、クラッシュしました。どういう理由ですか?ありがとうございました!
c++ - gil boost : rgb8_image_t を rgba8_image_t に変換します
GIL 構文について少し混乱しています。変換したい
に
アルファチャンネルを1に設定します。組み込み関数はありますか。そうでない場合、これを手動で行う方法は?