問題タブ [timage]
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 - Delphi 6: アルファブレンディングはサブイメージとメイン Canvas の間で機能しますが、サブイメージ間では機能しません
私は Delphi 6 アプリケーションを持っており、TBitmap の Canvas を白で塗りつぶすために clWhite を使用して FillRect() を呼び出し、続いて toTextOut() を呼び出すことによって作成されたイメージ (サブイメージ) を含む TBitmaps の配列があります。ビットマップのキャンバスにテキストを印刷します。
TImage コンポーネントに属するメイン Canvas を更新するタイマーがあり、各サブイメージ X、Y 座標が動いているために加えられた変更を反映するために、Interval ごとに配列の内容が反映されます。まず、clWhite で FillRect() を使用して、メインの Canvas を白で塗りつぶします。サブイメージを「印刷」するには、配列を反復処理し、Alphablend() を呼び出して、各サブイメージをメイン Canvas に「印刷」します。各サブイメージには、不透明度の制御に使用される Z 座標があります。Z 座標が高いサブイメージは、Alphablend() の値が低くなり、「クローズ アップ」のものよりも透明に見えます。
アルファブレンディングは、個々のサブイメージでうまく機能し、座標が高いものは、Z 座標が低いものよりも透明に見えます。ただし、Z 空間でオーバーラップするサブイメージに問題があります。重なり合うサブイメージ間のアルファ ブレンディングは機能していないようです。代わりに、オーバーラップするサブイメージの「後ろ」にあるサブイメージは、その上にあるイメージに属する白い背景によって遮られます。私が望むのは、2 つのサブイメージを適切に重ね合わせて、2 つのテキスト文字列が互いに重なって表示されるようにすることです。代わりに、前面のテキスト文字列が表示され、TBitmap の Canvas を構成する白い背景がどこにでも存在し、その「後ろ」のテキスト文字列が消去されます。
個々のサブイメージとメイン キャンバスの間でアルファ ブレンディングが機能しているのに、サブイメージ間では機能していない理由を誰か教えてもらえますか? オブジェクトとしてではなく一時的なコンテキストでのみサブイメージ間で言うのは、サブイメージが印刷されるときにすべてメイン キャンバスの一部になる必要があり、アルファ ブレンドがそれらを適切にブレンドすることを期待しているからです。
サブイメージ間の「白」が、サブイメージとメイン Canvas に属する「白」との間の「白」と同じように扱われていないかのようです。
フォローアップ: Andreas のコメントに応えて、すべてのサブイメージ TBitmap の PixelFormat を pf32bit に設定しました。現在、サブイメージの「間」でアルファブレンディングが行われています。残念ながら、サブイメージの白い部分は透明色として扱われていません。代わりに、上にあるサブイメージの白い背景が下にあるサブイメージに属するテキストとアルファブレンドされ、上にあるサブイメージの周りに薄い灰色のフレームが作成されます。必要な効果を得るには、サブイメージの白い背景を完全に無視する必要があります。
delphi - Delphi 6: TImage の幅と高さのプロパティは間違った値を報告しますか?
TImage コンポーネントの幅と高さのプロパティに関して、奇妙な問題が発生しています。テストとして、TImage の幅と高さの中間点を取得し、中央に配置されるようにそこにドットを描画することで、TImage コンポーネントの中心 (本来あるべきもの) に赤いドットを描画します (centerPoint2D は TPoint です)。
赤い点は TImage の中央ではなく、その右下のどこかに表示されます。さらに、コンポーネントに出力するテキストはすべて引き伸ばされて表示されます。TImage が報告されたサイズよりもはるかに大きく、見た目のビューポートから見えるものよりも大きく、見えるものが切り取られているかのようです。
追加の詳細。TImage コントロールは、TFrame 上にある TGroupBox 上にある TPanel 上にあります。ただし、これらすべてのコンポーネントの Align プロパティは alClient に設定されています。TFrame 自体の Align プロパティは alNone に設定されています。ただし、フォーム上にあるインスタンスの Align プロパティは、設計時に alClient に設定されています。つまり、実行時に表示される部分よりも TImage コンポーネントが大きくなってはいけません。さらに、報告された寸法は、画面に表示されるコンポーネントのサイズと一致しているように見えますが、それを客観的に確認するための「ピクセル定規」ユーティリティはありません。
delphi - Timageコンポーネントのパーツに大きな画像をロードする
サーバー上に大きな画像があります。ユーザーがいずれかを要求したら、それらをクライアントマシンにダウンロードし、完了したらTimageコントロールにロードします。
これで、クライアントが画像をチャンク(パーツ)で提供するように要求し、チャンクがダウンロードされるとすぐにTimageコントロールに表示され、他のチャンクがダウンロードされるとすぐに、以前にロードされた画像に追加される必要があります。
私は同じことを進める方法を理解していません。Delphi2006を使用しています
delphi - 小さなシステムアイコンをロードする方法は?
エラー/警告/情報のために16x16ピクセルのアイコンを表示する必要があります。残念ながら、両方ともLoadIcon(0, IDI_*)
常にLoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED)
32x32バージョンのアイコンを教えてくれます。
読んShGetStockIconInfo
だことがありますが、それはVista以降でのみ利用可能であり、XPをサポートする必要があります。
何か案は?
TImage
それが重要な場合は、コンポーネントでDelphi2010を使用しています。
delphi - Delphi 7 TImage と TImageList
私を整数のプライベートにしましょう
コード
Image1 のサイズに合わせてリストからアイコンを拡大するにはどうすればよいですか?
delphi - AlphaBlendValue プロパティを Delphi の TImage に追加する最も簡単な方法は何ですか?
疑わしいパラメーター値がある場合に表示されるダイアログに「注意」イメージがあります。ユーザーは常にそれに気付くとは限らないので、1 秒程度で周期的にフェードインおよびフェードアウトしたいと考えています (そうです、Visible プロパティを切り替えることもできますが、Visible プロパティを切り替えただけのように見えます)。それを独自のフォームに配置してダイアログ上に浮かせる (そしてフォームの AlphaBlendValue プロパティを変更する) よりも簡単な方法はありますか?
delphi - PNG画像をフェードするこのD2006コードが機能しないのはなぜですか?
この質問は以前の質問から生まれました。ほとんどのコードは、Delphi の以降のバージョンでおそらく機能する、提案された回答からのものです。D2006 では、不透明度の全範囲を取得できず、画像の透明部分が白く表示されます。
画像はhttp://upload.wikimedia.org/wikipedia/commons/6/61/Icon_attention_s.pngからのものです。
DFM が保存された後、画像がそのまま残らないため、実行時に PNGImageCollection から TImage に読み込まれます。動作を説明する目的では、おそらく PNGImageCollection は必要なく、設計時に PNG 画像を TImage にロードし、IDE から実行するだけで済みます。
フォームには 4 つのボタンがあり、それぞれが異なる不透明度の値を設定します。不透明度 = 0 で問題なく動作します (ペイントボックスの画像は表示されません。不透明度 = 16 は白い背景を除いて問題ないように見えます。不透明度 = 64、255 も同様です。不透明度は約 10% で飽和しているようです。
何が起きているかについてのアイデアはありますか?
** このコード (graphics32 TImage32 を使用) はほぼ動作します **
** (UPDATE) このコード (graphics32 TImage32 を使用) は動作します **
次のコードは、実行時に PNG 画像を Graphics32.TImage32 に割り当てることに成功しています。アルファ チャネルを持つ PNG 画像は、設計時に TPNGImageCollection (任意のサイズの画像を混在させることができるため、非常に便利なコンポーネント) に読み込まれます。フォームの作成時にストリームに書き込まれ、 LoadPNGintoBitmap32 を使用してストリームから Image32 に読み込まれます。これが完了したら、TImage32.Bitmap.MasterAlpha に割り当てることで不透明度を制御できます。OnPaint ハンドラを気にする必要はありません。
delphi - TPanelができるように、上にコントロール?
私のプログラムは時間のかかるタスクを実行しており、アプリケーション ウィンドウの中央に TImage を表示したいのですが、一番上に表示されません。私の VST は常に一番上にあります。しかし、TPanel を使用すると、一番上に表示されたままになりますか? TImageにそれをさせるにはどうすればよいですか?
実際、すべてのコントロールに適用される解決策は素晴らしいでしょう:)
ありがとう!
delphi - Delphi 2006:PNGをTImageに実行時に割り当てると、アルファ透明度が失われます
Delphi2006のTImageはPNGを完全にはサポートしていません。フォームにアルファ透明度の画像を表示するには、実行時に画像を読み込む必要があります。設計時にロードすることはできますが、PNGがDFMファイルに保存されていないため、存続しないと思います。最新のDelphiでは、これはすべて厄介なことだと確信していますが、現時点ではアップグレードできません。
とにかく、私は実行時にそれらをロードしていました:
PNGImageCollectionコンポーネントは、さまざまなサイズのすべてのPNGを保持し(これらは設計時に作成およびロードされます)、FormCreateイベントでそれぞれのTImageに割り当てます。
フォームで使用した後、これらの画像の1つを別の場所で再利用しようとして問題が発生するまで、これは問題なく機能しました。TPictureを割り当てる行為により、Assignの結果としてTPictureが空の画像に設定されていることがわかりました。これは、ルーチンTPicture.ForceTypeで発生していました。このルーチンは、AFAICTがFGraphicのタイプをチェックし、目的のタイプでない場合は、FGraphicを解放して、要求されたタイプの新しいインスタンスを作成します。
わかった。少しスクラッチした後、多分私は本当にこれを行うべきであることがわかります:
これは、Assignが画像を覆い隠さなかったという点でトリックを行いましたが、画像は半透明のビットで不透明として表示されます。
それ以外の:
この画像でアルファ透明ビットを正しく表示するにはどうすればよいですか?(および補足の質問:Image1.Picture.Bitmap.Assignはそれを行う正しい方法ですか?)
コードをもう少し詳しく説明します。
TImageの「再利用」に問題があったコードでは、シーケンスは次のとおり
でした。
(PNGIMageは会社のロゴであり、LogoImage1はメインフォームにあります)。
印刷レポートヘッダー:
ロゴを印刷するルーチンが最初に呼び出されると、エラーなしで実行されますが、PrintBitmapRectの呼び出し後、LogoImage.Pictureはクリアされたままになります。次に印刷ヘッダールーチンが呼び出されると、画像の幅と高さがゼロであるため、CalcGraphicHeightの呼び出しは失敗します。
Picture.AssignをPicture.Bitmap.Assignに変更すると、ヘッダー印刷ルーチンのRTEが修正されますが、同じ「修正」をPNGから割り当てられた他の静止画像(上記の歯車など)に移植すると、aplhaチャネルが失われました。
delphi - BLOBストリームからTImageに任意の画像をロードする方法は?
正しく理解できればTImage.LoadFromFile
、ファイル拡張子から画像の種類を判別します。
生の画像が含まれているから画像タイプを自動的に検出する方法はありますTBlobStream
か?
私の現在のコード: