Re: ARGB32 Premultipliedの画像データを描画可能形式にする手法 ( No.1 ) |
- 名前:管理人 日時:2024/08/17 01:49
ARGB32 はバイト単位で
B G R A B G R A ...
の順番で色情報が格納されています( 値はそれぞれ unsigned char 型 )
ARGBF32 ではバイト単位で
R R R R G G G G B B B B A A A A R R R R G G G G B B B B A A A A
の順番で色情報が格納されています( 値はそれぞれ float 型 )
ARGBF32 は格納されている色の順番と関数名が一致していなくてすみません… m(_ _;m
|
Re: ARGB32 Premultipliedの画像データを描画可能形式にする手法 ( No.2 ) |
- 名前:猫の湯飲み 日時:2024/08/17 23:23
無事、ARGB32 Premultipliedの画像データを描画することが出来ました。ありがとうございました。
重ね重ねのご質問になってしまってすみませんが、あと2つほど質問があります。
1)
CreateARGBF32ColorBaseImageで作成したBaseImageはReleaseBaseImageで削除しなければならないのでしょうか?
ReleaseBaseImageで削除をした場合、アクセス違反を起こし、
削除をしない場合、
2693:Alloc memory dump
2693: size: 1440160( 1406.406kb) user size: 1440000( 1406.250kb) time:44471 file:e\DxBaseImage.cpp
とメモリーリークを起こします。
2)
BaseImageから CreateGraphFromBaseImageを使用して作成したグラフィックハンドルはアンチエイリアスには対応していないのでしょうか?
SetCreateDrawValidGraphMultiSampleなどを設定した場合でもジャギーが発生してしまいます。
お忙しいところ恐れ入りますがよろしくお願いいたします
|
Re: ARGB32 Premultipliedの画像データを描画可能形式にする手法 ( No.3 ) |
- 名前:管理人 日時:2024/08/19 01:19
> 1)
> CreateARGBF32ColorBaseImageで作成したBaseImageはReleaseBaseImageで削除しなければならないのでしょうか?
はい、ReleaseBaseImage で削除する必要があります
( 削除しないとメモリリークします )
> ReleaseBaseImageで削除をした場合、アクセス違反を起こし、
画像データを参照したり書き込まれたりされていると思いますが、そのコードをコメントアウトしても
アクセス違反が発生しますでしょうか?
もし書き込みのコードを有効にした場合のみアクセス違反が発生する場合は、猫の湯飲みさんが書かれた
コードのどこかで BaseImage の情報を壊してしまっていて、ReleaseBaseImage の中で壊された情報を
元に解放処理を行おうとしてアクセス違反が発生しているのだと思います
> 2)
> BaseImageから CreateGraphFromBaseImageを使用して作成したグラフィックハンドルはアンチエイリアスには対応していないのでしょうか?
> SetCreateDrawValidGraphMultiSampleなどを設定した場合でもジャギーが発生してしまいます。
SetCreateDrawValidGraphMultiSample( TRUE ); を実行して有効になるアンチエイリアスは
『描画対象にできるグラフィックハンドルに対して3Dポリゴンの描画を行った場合』なので、
CreateGraphFromBaseImage の前に SetDrawValidGraphCreateFlag( TRUE ); を実行して
『CreateGraphFromBaseImage で作成できるグラフィックハンドルを描画対象にできるようにする』ことで
CreateGraphFromBaseImage で作成したグラフィックハンドルに対して3Dポリゴンの描画を行った際に
ポリゴンのジャギーを消すアンチエイリアス効果が有効になります
|
Re: ARGB32 Premultipliedの画像データを描画可能形式にする手法 ( No.4 ) |
- 名前:猫の湯飲み (解決済) 日時:2024/08/27 21:51
返信が大変遅れてしまい申し訳ありません。
CreateARGBF32ColorBaseImageで確保されたメモリを別のメモリで書き換えてしまってため、アクセス違反が発生していました。
void* に素直に書き込んだところアクセス違反も無く正しく描画出来ました。
お忙しい中、質問に答えていただき、ありがとうございました。
|