- 1 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:02:11 ]
- スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。 「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ! 過去スレ、関連リンクは>>2-10くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build72 pc11.2ch.net/test/read.cgi/tech/1226575789/
- 28 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:27:52 ]
- 87
- 29 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:31:36 ]
- >>27
わかりました。調べてみます。
- 30 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:46:04 ]
- >>27>>28
はい、その通りエラーコード87でした。 つまり ERROR_INVALID_PARAMETER って事ですか・・・ ちなみにAlphaBlend()を通さずに直接描画するとちゃんと グラデーションがかかった256×256の画像が表示されるのですが、 どこがIvvalid Parameterなのやらさっぱり。
- 31 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:02:42 ]
- INVALID_PARAMETERって言われてるなら渡してるハンドルが変なんじゃないの
OWLだっけ?じゃなくて普通に作ったHDC渡して試すとか
- 32 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:06:03 ]
- VCLですが、HandleプロパティがVCL内部に保持している
オブジェクトのHDCを取り出します。 BCBのヘルプを見ても、Handleで取り出したHDCでWin32を 呼び出しているプログラム例が載っていました。 でも実際に呼び出しが失敗しているわけですから、もうHandleが おかしいとしか考えられませんね。普通にHDC作ってやってみます。
- 33 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:08:46 ]
- www.geocities.jp/asumaroyuumaro/program/winapi/bitmap.html
例えばこれですが、Delphiなんですけどちゃんと動くんですよね。 ここを参考にBCBに移植したら動かなくなったので、移植が失敗 しているのかもしれません。
- 34 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:25:26 ]
- NescafeGoldBlend()
- 35 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:37:02 ]
- お騒がせしました。
×bt->Handle, 0, 0, bt->Width, bt->Height, ○bt->Canvas->Handle, 0, 0, bt->Width, bt->Height, 私のケアレスミスでした。無事動きました。
- 36 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:38:46 ]
- NescafeGoldBlendの大瓶500円で買ってきますた
- 37 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:57:47 ]
- 職場で飲むのかえ?
- 38 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 01:47:06 ]
- そういやAlphaBlend() APIって計算式おかしいよね
Dst.Red = Src.Red * Src.Alpha + (1 - Src.Alpha) * Dst.Red Dst.Green = Src.Green * Src.Alpha + (1 - Src.Alpha) * Dst.Green Dst.Blue = Src.Blue * Src.Alpha + (1 - Src.Alpha) * Dst.Blue ↑これが正しいはずなのに > Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red > Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green > Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue ↑実際はこういう計算らしい なんでこんなおかしな仕様なんだろう
- 39 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 02:13:36 ]
- うそん
- 40 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 02:15:24 ]
- >>38
SrcとAlphaの対応は固定だから事前に計算しておけば計算量が減るだろ?
- 41 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 02:22:38 ]
- >>38
もっとちゃんとヘルプ見た方がいいぞ。
- 42 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 03:16:14 ]
- >>40
違う AC_SRC_ALPHAを指定するとSrc/Destは合成する画像のそれぞれのピクセルだから ピクセルごとにRed/Green/Blue/Alphaの値は違う
- 43 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 06:28:55 ]
- >>38-42
要するに、Src(32bppDIB)をDstに合成したいときは、 AlphaBlend(Dst, Src) ではなくて、 Tmp.Red = Src.Red * Src.Alpha Tmp.Green = Src.Green * Src.Alpha Tmp.Blue = Src.Blue * Src.Alpha Tmp.Alpha = Src.Alpha を用意しておいて、 AlphaBlend(Dst, Tmp) って事でしょ。使えねぇw
|

|