問題タブ [graphics32]
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.
delphi - Graphics32 の現在の状況を知っている人はいますか?
Graphics32 1.8.3の最後のリリースは、 2007 年 3 月の日付です。
公式のDelphi 2010 互換バージョンはいつ提供されますか?
Graphics32 の公開 SCM リポジトリはありますか?
delphi - Graphics32 ライブラリで ClearType を使用する (Delphi)
Delphi 2009 でGraphics32ライブラリを使用しています。MS の ClearType テクノロジで TBitmap32.TextOut メソッドを使用してフォントをレンダリングすることは可能ですか? GR32 のビルトイン アンチエイリアシング (TBitmap32.RenderText) については承知していますが、全体的な品質とパフォーマンスは満足できるものではありません。
[ アップデート ]
別の問題が発生しました。TCustomImage32 の子孫クラスのメソッドのコメントに投稿された Tondrej のリンクの関数を使用しています。そのクラスのインスタンスは dmBlend モードで動作しており、その Font.Color プロパティの使用に問題があります - TextOut メソッドを使用してレンダリングされたテキストはそのプロパティを無視しています (テキストはカラー値「アルファ」を持っているかのようにレンダリングされます)。RenderText を使用した場合、問題は発生しませんでした。TPaintBox32 コンポーネントをペイントするときは問題ないようです。
delphi - 24bppビットマップから32bppへのインプレース変換
Delphi 7では、かなり大きな24bppビットマップ(数100 MB)を処理する必要があります。さらなる処理のためにGraphcis32ライブラリを使用したいので、それらを32bpp(TBitmap32)に変換する必要があります。ただし、TBitmap32のLoadFromFileメソッドは、一時的な従来のTBitmapを作成して、元の24bppビットマップをロードします。このビットマップは、必要なフォーマット変換を行うためにTBitmap32に割り当てられます。もちろん、これらの巨大なビットマップを2つメモリに入れることで、メモリの負荷は約2倍になり、これは私のアプリケーションにとって致命的となる可能性があります。
私が考えているのは、24bppビットマップを事前に割り当てられたバッファーにロードする方法です。このバッファーは32 bppビットマップが収まるように配置されています。次に、バッファーの端から始めて、RGBバイトを32bppに必要なオフセットに移動します。 。
これは可能ですか?事前に割り当てられたバッファにビットマップをロードするにはどうすればよいですか?何か案が?
delphi - Delphi 6 - Graphics32 ライブラリを使用しているときにオーナー ウィンドウの再描画が必要な場合にのみビットマップが更新される
ネイティブの Delphi コードを使用して TPaintBox Canvas で 3D モーションを作成するアプリケーションがあります。古いコードでは、Timer イベントで 3D イメージを一時的な TBitmap にレンダリングしました。TPaintBox の OnPaint() イベントでは、一時的な TBitmap を TPaintBox の Canvas に BitBlt() します。このアプローチはうまくいきましたが、動きがぎくしゃくしていました。
モーションの滑らかさに満足できなかったので、代わりに非常に大きなワークスペース ビットマップに「レンダリング」してから、それを TPaintBox Canvas にダウンサンプリングすることにしました。リサンプリングを行うために、ここで読んだ Graphics32 ライブラリを使用しました。
大きな TBitmap32 (幅 1100 x 高さ 1100) にレンダリングするようにコードを変更し、それをダウンサンプリングするときに、TLanczosKernel カーネルで Graphics TKernelResampler オブジェクトを使用して、別の TBitmap32 にダウンサンプリングします。 TPaintBox Canvas を開き、TPaintBox の Refresh メソッドを呼び出します。TPaintBox OnPaint イベントで、ダウンサンプリングされた TBitmap32 を TPaintBox Canvas に BitBlt() します。
これは機能しますが、問題は、TPaintBox を所有するフォームが再描画を必要とする場合にのみ再描画が表示されることです。これは、レンダリングが完了した直後に TPaintBox で Refresh メソッドを呼び出すという顔にもかかわらず、古いコードでは発生しなかった問題です。私が言ったように、それに。有効性テストとして、事前レンダリングに使用する大きな高解像度 TBitmap32 オブジェクトと小さな TBitmap32 オブジェクトの両方で SaveToFile() を呼び出しました。ビットマップは、Timer イベント間でフレームのコンテンツがまったく変更されていないことを実際に示していたため、少なくとも TPaintBox コンポーネントでは、奇妙な再描画関連の問題ではありません。
フォームを移動するか、フォームのクライアント領域の一部を別のフォームでオーバーレイしてフォームのキャンバスを無効にすると、TBitmap32 オブジェクトのコンテンツが更新され、チェックとしてディスクに保存したビットマップ イメージも更新されます。
大規模な高解像度ワークスペースにレンダリングした新しいコンテンツが更新されるように、Graphics32 TBitmap オブジェクト自体を無効にする必要があるかのようです。ただし、TBitmap32 にはそのような無効化/更新呼び出しはありません。
Graphics32 ライブラリの経験があり、フォームの再描画が必要な場合やクライアント領域が無効になっている場合にのみ画像が変更される理由を教えていただければ幸いです。
delphi - Graphics32 で RenderText の正確なテキスト幅を取得する方法
私の質問は十分に明確だと思いますが、さらに説明します。簡単に言えば、RenderText プロシージャで AntiAlias を使用している場合、TextWidth 関数内で取得される値が正しくありません。適切なテキスト幅を得るにはどうすればよいですか?
delphi - Delphi、GR32 + PngObject:Bitmap32への変換が期待どおりに機能しない
複数の半透明のPNG画像を描画するためにGR32を使用しています。これまで私は次の方法を使用してきました:
ただし、GR32 Webサイト( http://graphics32.org/wiki/FAQ/ImageFormatRelated)で提案されている方法に切り替えたいと思いました。
最初の方法は完全に正常に機能しますが、2番目の方法(同じ結果が得られるはずです)は、アルファチャネルで非常に奇妙な問題を引き起こします。画像を参照してください(Paint.NETで「配置」された同じ画像との比較も示しています)背景とアイコンの両方エディターのレイヤーで開かれました)。この画像は、Bitmap32が正しくロードまたは描画されていないことを示しています。任意のヒント?
-11月22日追加
描画ではなく、PNGをBMP32にロードすることであることがわかりました。BMP32からPNGに保存し直すと、誤った「白くされた」(左側の)PNG画像が生成されます。
delphi - Graphics32 を使用したクリッピング マスクの作成
画像処理にはGraphics32を使用しています。その機能を見ると、クリッピング マスクの適切な実装をまだ見ていないことに気がつきます。「クリッピング」という用語があちこちに出てきますが、それは別のことを指しているようです。
簡単に言えば、1 つのレイヤーが別のレイヤーへの「覗き穴」として機能する必要があります。レイヤー A はレイヤー B に投影する必要がありますが、レイヤー B が表示されている場合に限ります。(クリッピング マスクとは何かを再定義する必要はないと思います。)
提示したいのが他のレイヤーのビットマップだけである場合、それを行うのはそれほど難しくありません-このトリックを使用できます-しかし、物事を複雑にしているのは、レイヤーのビットマップが伝えないことですレイヤーによって表示される内容についての多く。レイヤーは次のいずれかです。
- (部分的に) 見えない (見えないとき)
- 移動/ストレッチ + オプションでリサンプリング
- 回転した
ビットマップには影響しません。
実際には、これに対する準備が整った実装はありませんか? これを自分で行うための提案はありますか?
進捗
Graphics32 のソースでいくつかの有用な要素を見つけました。たとえば、次の宣言を使用します。
保護されたメソッドにアクセスするTLayerAccess(ABitmapLayer).Paint(ABitmap32)
には、画面に描画するのとまったく同じように、このレイヤーだけをビットマップに描画するように呼び出します。
delphi - TImage32(Graphics32ライブラリ)からガベージDFMデータを削除する
TImage32から派生したコントロールがあります。
TChromaDisplayをフォームにドロップすると、Bitmap.Dataフィールドにガベージデータ(単なるグレー画像)が保存されているため、結果のDFMファイルが巨大(<1KBではなく300KB)になることを除いて、すべて問題ありません。フォームにコントロールをドロップするたびに、ビットマップイメージが作成され、灰色で塗りつぶされます。画像(ゴミ)の内容をDFMファイルに保存したくないのですが、EXEが大きくなるのでどうすればいいのかわかりません。
おそらく、TChromaDisplayのどこかに書き込む必要があります。TChromaDisplayに保存/保存されている画像データがないことを作成します。しかし、私はそれをどこで/どのように行うのかわかりません。
Createでこれを試しましたが、役に立ちません。
delphi - Graphics32 ラッピング変換を使用してポリゴン領域を変換するには?
Graphics32 は、イメージ ラッピング サンプル (\Transformation\ImgWarping_Ex) を提供しており、ユーザーはブラシを使用して bitmap32 の一部をラップできます。ただし、このサンプルは多くの複雑な概念が混在しているため、理解するのが非常に困難です。
ポリゴン領域をある形状から別の形状に変換するラッピング変換が必要だとしましょう。どうすればそのようなタスクを達成できますか?
c++builder - graphics32 は C++ ビルダー XE2 で動作しますか?
graphics32 1.9.1 1581 をインストールし、GR32_DSGN_RSXE2 パッケージをコンパイルして追加しました。ただし、.h ファイルはなく、コンポーネントとコンポーネント フォルダは Delphi プロジェクトでのみ表示されます。C++ の実装はビルダー 6 で停止しましたか? cbuilder XE2 で使用する方法はありますか? の代用はありますか?