ナビ 制作 公式 ヘルプ


 NADE BBS

 トップ 最新 新規書込 検索

2017-12-09 04:12:11 -土 曜-

356 : イメージ部品等からUpdateLayeredWindowへ画像を渡す方法 - マミ さん


アニメーション込みのデスクトップAIマスコットの作成における、UpdateLayeredWindowの関連APIの使い方についてなのですが、

まず
①目的   :イメージ部品(フォームへ直表示でも可)に読み込んだ32bpp画像(透過png)をデスクトップ(実際は画像以外透過したフォーム)へ表示。
②できた部分:32bpp(アルファ付bmp)のファイル→メモリDC→UpdateLayeredWindowにて描画用フォームへ反映
③問題点  :32bppのbmpファイルを作るのは1フレームずつ手作業で大変です。透過pngが使いたいのが目的です。


イメージ部品では32bppが返るのでできるとは思うのですが、png読込→イメージ部品等→UpdateLayeredWindowで透過を維持できる?という問題点、そもそもイメージから引き出し成功しないのでわかりません…が、できればこの流れが一番希望する処理の流れです。

または、直読みの場合、LoadImageでpngを指定できる方法(代替API等)があれば、こちらでもOKです。


LoadImageでpngは無理そうでしたので、画像を読み込んだ 描画元イメージ部品(HANDLE)→GetDC(DC)→CreateCompatibleBitmap(MDC)と取得していって、
SelectObject(描画先フォームのMDC,描画元イメージ部品のMDC)と紐づけして、UpdateLayeredWindowへ放り込んだらAPIのエラーは戻らないのですが描画されませんでした。

調べた(試した)APIさん達
*GetLastError()=DLL("kernel32.dll","DWORD GetLastError()")
*GetDeviceCaps(P1,P2)=DLL("gdi32.dll","int GetDeviceCaps(HDC hdc,int nIndex)")
*ReleaseDC(P1,P2)=DLL("user32.dll","BOOL ReleaseDC(HWND hwnd,HDC hdc)")
*GetDC(P1)=DLL("user32.dll","HDC GetDC(HWND hwnd)")
*DeleteDC(P1)=DLL("gdi32.dll","BOOL DeleteDC(HDC hdc)")
*CreateCompatibleDC(P1)=DLL("gdi32.dll","HDC CreateCompatibleDC(HDC hdc)")
*CreateCompatibleBitmap(P1,P2,P3)=DLL("gdi32.dll","HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight)")
*GetObject(P1,P2,P3)=DLL("gdi32.dll","int GetObjectA(HGDIOBJ hgdiobj,int cbBuffer,LPVOID lpvObject)")
*SelectObject(P1,P2)=DLL("gdi32.dll","HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj)")
*DeleteObject(P1)=DLL("gdi32.dll","BOOL DeleteObject(HGDIOBJ hObject)")
*LoadImage(P1,P2,P3,P4,P5,P6)=DLL("user32.dll","HANDLE LoadImageA(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int cyDesired,UINT fuLoad)")
*UpdateLayeredWindow(P1,P2,P3,P4,P5,P6,P7,P8,P9)=DLL("user32.dll","BOOL UpdateLayeredWindow(DWORD hwnd,DWORD hdcDst,LPPOINT pptDst,LPSIZE psize,DWORD hdcSrc,LPPOINT pptSrc,DWORD crKey,LPBLENDFUNCTION pblend,DWORD dwFlags)")

えっと、関数とかあまり得意じゃないのでそもそも使い方に誤りがあるかもです…;
もう一度まとめますと、透過pngを描画させたいということです。これに関して「なでしこでは無理です!」なら諦めますw
「そのAPIで行けますよ!」であれば私の要領不足なので謝ります… ご教授お願いいたします。

p.s. UpdateLayeredWindowに拘っているのは抜いた画像のエッジにAA掛けられるからです。pngのAチャンネルも反映できる代替手段があれば他の方法でも…


(編集パスワード送信)

親記事

この内容(No.356)に返信

この内容(No.356)をダウンロード

この内容(No.356)のテキスト表示

子記事

363 Re:Re:Re:イメージ部品等からUpdateLayeredWindowへ画像を渡す方法 (17-12-14)
361 Re:Re:イメージ部品等からUpdateLayeredWindowへ画像を渡す方法 (17-12-14)
358 Re:イメージ部品等からUpdateLayeredWindowへ画像を渡す方法 (17-12-10)
357 Re:イメージ部品等からUpdateLayeredWindowへ画像を渡す方法 (17-12-10)



RSS


www.eznavi.net