問題タブ [stretchdibits]
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 - StretchDIBits の問題
32 ビット イメージ (アルファ チャネル付きの PNG) を 32 ビット ビットマップ (または Bitmap32) にブリットしたいと考えています。
イメージをブライトする代わりにブレンドするように関数に指示する方法がわかりません。BitBlt の代わりに AlphaBlend を使用するように、単純なブリットではなく画像をブレンドするためにこの関数を作成する必要があります。
これは私の例です:
ABitmap は TBitmap32 (GR32) のタイプですが、32 ビット パレットの通常の TBitmap でも同じ結果になります。
FreeImage_GetBits と FreeImage_GetInfo は、ビット配列の先頭と構造体を指す FreeImage ライブラリ関数です。
私が何をしても、StretchDBit はブレンドを許可しません。
c++ - 特定の画像サイズでのみ失敗する StretchDIBits
画像の印刷に使用StretchDIBits
していますが、画像が特定のサイズになると何らかの理由で失敗します。
画像データは、24 ビット BGR 形式の他の画像ソースから unsigned int 配列にロードされます。先ほど言ったように、一部のサイズでは機能しますが、まったく機能しないため、画像とバッファーが完全に問題ないことを既に確認しました。
私がテストしている現在のサイズは 638x1014 です。高さを 1013 に変更すると正常に動作しますが、1014 の場合は何らかの理由で完全に失敗します。
すべてがどのようにセットアップされているかを示すコードを次に示します。
StretchDIBits
失敗し、印刷結果が空白ページの場合はゼロを返します。
biSizeImage
コメントにあるように、指定せずにゼロのままにしておくとStretchDIBits
、バッファの終わりを超えて読み取ろうとするため、クラッシュが発生するため、問題が何であるかについて漠然とした考えがあります。それでも、一部のサイズでは機能するが他のサイズでは機能しないため、なぜそれを行っているのかを正確に診断する方法がわかりません。