HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0429
Romanhmmでの動画の背景透過方法について3未解決


Roman

リンク

2024/4/29(Mon) 22:34:52|NO.101642

HSP MULTIMEDIA( hmm.dll )でゲームのカットインで動画を使おうと思ったのですが、透過がうまくできません。
ゲームの画面を写してその上から動画を流しているのですが、動画が黒い背景のまま写ってしまいゲーム画面が見えません。
動画の黒色の部分はRGB( 0, 0, 0 )です。

#include "hmm.as" #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 #define FULL_SCREEN_MODE 0 #define WINDOW_MODE 1 *init //必ずDirectGraphicsを先に初期化してください。 dgInit ScrMode = WINDOW_MODE dgScreen SCREEN_WIDTH, SCREEN_HEIGHT, ScrMode, 32, 0 /* DirectShowの初期化 第2引数を1にすることでDirectGraphicsで動かすことができるようになります。 */ dshInit , 1 dshLoadFname "カットイン.avi", 0 /* 動画ファイルの読み込み後に、その動画をDGBUFFERの何番に描画するかを決めます。 p1にdgBufferの番号 p2に動画の管理番号 */ dshSetMovieTodgBuffer 1, 0 dshPlay 0, 1, 0, 0, 0 dshGetOriginalVideoSize 0, VideoWidth, VideoHeight *main await dgGsel 0 dgColor 0, 0, 0, 255: dgClear dgBlendMode 1 dgScaleAndAngle SCREEN_WIDTH, SCREEN_HEIGHT, 0 dgRect 0, 0, VideoWidth, VideoHeight dgColor 255, 255, 255, 255 dgPos 0, 0 dgGcopy 1, 2 dgRedraw //画面更新 goto *main
hmm.dllのバージョンは1.40です。hsptvの公式ホームページからダウンロードができなくて少し古いバージョンです。。。



この記事に返信する


zrs90(5さい)

リンク

2024/4/29(Mon) 23:02:47|NO.101643

ダウンロードはこの方法で出来ませんか?
それっぽい過去記事がありました

https://hsp.tv/play/pforum.php?mode=all&num=100177



Roman

リンク

2024/4/30(Tue) 21:30:15|NO.101644

zrs90(5さい)さん返答ありがとうございます。
その記事を見てやってみたのですが、バージョンが1.3で古いのでした。
ウェブアーカイブからダウンロードしてみたのがバージョン1.4だったのですがhsptvでは1.42と記されていて少しだけ古いのかな?程度ですが気になったので質問してみました。
また昨日質問した文章を改めて見たところ全くまとまっていなかったので補足です。
hmm.dllのmovie2dgbuffer.asのサンプルを参考に作成してみたのが以下のスクリプトです。

#include "hmm.as" #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 #define FULL_SCREEN_MODE 0 #define WINDOW_MODE 1 *init //必ずDirectGraphicsを先に初期化してください。 dgInit ;DirectGraphicsを初期化 ScrMode = WINDOW_MODE dgScreen SCREEN_WIDTH, SCREEN_HEIGHT, ScrMode, 32, 0 /* DirectShowの初期化 第2引数を1にすることでDirectGraphicsで動かすことができるようになります。 */ dshInit , 1 ;DirectShowを初期化,動画をDGBUFEERとして扱う dshLoadFname "カットイン.avi", 0 /* 動画ファイルの読み込み後に、その動画をDGBUFFERの何番に描画するかを決めます。 p1にdgBufferの番号 p2に動画の管理番号 */ dshSetMovieTodgBuffer 1, 0 dshPlay 0, 1, 0, 0, 0 dshGetOriginalVideoSize 0, VideoWidth, VideoHeight *main await dgGsel 0 ;出力先のスクリーン番号 dgColor 0, 0, 0, 255: dgClear ;スクリーン全体をDGCOLORの色で塗りつぶす dgBlendMode 1 ;1 = 半透明合成(透過有りRGB(0, 0, 0)を透過) dgScaleAndAngle SCREEN_WIDTH, SCREEN_HEIGHT, 0 dgRect 0, 0, VideoWidth, VideoHeight ;コピーしたい矩形領域を設定 dgColor 255, 255, 255, 255 dgPos 0, 0 ;表示したい座標を指定 dgGcopy 1, 2 dgRedraw //画面更新 goto *main /* DGGCOPY p1, p2 引数 p1:コピー元のスクリーン番号 コピー先(出力先)とコピー元で同じ番号を指定することは出来ません。 p2:描画フラグ(省略時0) 機能 p1で指定したスクリーンをDGRECTで指定した領域分を DGSCALEANDANGLEで指定した値で拡縮と回転し DGBLENDMODEで指定したブレンド方法とDGCOLORで設定したブレンド率で DGGSELで選択したスクリーンにDGPOSで指定した座標にコピーします。RGB( 0, 0, 0 )は透過されます。 ※DGCOLORで128, 128, 128, 255とした場合などはブレンド率は100%ですが、各画像のRGBの値は半分でコピーされます。 p2は描画フラグで 0 = 通常描画 1 = DGRECTで選択した領域の中心がDGPOSの表示座標になる。 2 = DGSCALEANDANGLEで指定した値は拡縮率ではなく、実際に指定した大きさでコピーされる。 4 = 拡縮は矩形の中心を軸に行われる。 8 = 左右反転で描画 16 = 上下反転で描画 これを組み合わせて指定することができる。 ;例) dginit dgscreen 640, 480, 1, 16 dgloadfname "sample.bmp", 1 dggsel 0 dgpos 0, 0 dgrect 0, 0, 64, 64 dgscaleandangle 128, 128, 256 dgblend 1 *main await 0 dgcolor 0, 0, 0, 0 dgclear dgcolor 255, 255, 255, 128 ddgcopy 1, 3 ;座標(0,0)の位置を中心にして128*128の大きさの半透明で表示される。 dgredraw goto *main
初めて使うので文法が間違っていたりなにか勘違いしているのかもしれません。
全くわからなかったので質問させていただきました。
もしできないようならばpngの連番も手かなと考えおります。



Roman

リンク

2024/4/30(Tue) 21:30:30|NO.101645

zrs90(5さい)さん返答ありがとうございます。
その記事を見てやってみたのですが、バージョンが1.3で古いのでした。
ウェブアーカイブからダウンロードしてみたのがバージョン1.4だったのですがhsptvでは1.42と記されていて少しだけ古いのかな?程度ですが気になったので質問してみました。
また昨日質問した文章を改めて見たところ全くまとまっていなかったので補足です。
hmm.dllのmovie2dgbuffer.asのサンプルを参考に作成してみたのが以下のスクリプトです。

#include "hmm.as" #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 #define FULL_SCREEN_MODE 0 #define WINDOW_MODE 1 *init //必ずDirectGraphicsを先に初期化してください。 dgInit ;DirectGraphicsを初期化 ScrMode = WINDOW_MODE dgScreen SCREEN_WIDTH, SCREEN_HEIGHT, ScrMode, 32, 0 /* DirectShowの初期化 第2引数を1にすることでDirectGraphicsで動かすことができるようになります。 */ dshInit , 1 ;DirectShowを初期化,動画をDGBUFEERとして扱う dshLoadFname "カットイン.avi", 0 /* 動画ファイルの読み込み後に、その動画をDGBUFFERの何番に描画するかを決めます。 p1にdgBufferの番号 p2に動画の管理番号 */ dshSetMovieTodgBuffer 1, 0 dshPlay 0, 1, 0, 0, 0 dshGetOriginalVideoSize 0, VideoWidth, VideoHeight *main await dgGsel 0 ;出力先のスクリーン番号 dgColor 0, 0, 0, 255: dgClear ;スクリーン全体をDGCOLORの色で塗りつぶす dgBlendMode 1 ;1 = 半透明合成(透過有りRGB(0, 0, 0)を透過) dgScaleAndAngle SCREEN_WIDTH, SCREEN_HEIGHT, 0 dgRect 0, 0, VideoWidth, VideoHeight ;コピーしたい矩形領域を設定 dgColor 255, 255, 255, 255 dgPos 0, 0 ;表示したい座標を指定 dgGcopy 1, 2 dgRedraw //画面更新 goto *main /* DGGCOPY p1, p2 引数 p1:コピー元のスクリーン番号 コピー先(出力先)とコピー元で同じ番号を指定することは出来ません。 p2:描画フラグ(省略時0) 機能 p1で指定したスクリーンをDGRECTで指定した領域分を DGSCALEANDANGLEで指定した値で拡縮と回転し DGBLENDMODEで指定したブレンド方法とDGCOLORで設定したブレンド率で DGGSELで選択したスクリーンにDGPOSで指定した座標にコピーします。RGB( 0, 0, 0 )は透過されます。 ※DGCOLORで128, 128, 128, 255とした場合などはブレンド率は100%ですが、各画像のRGBの値は半分でコピーされます。 p2は描画フラグで 0 = 通常描画 1 = DGRECTで選択した領域の中心がDGPOSの表示座標になる。 2 = DGSCALEANDANGLEで指定した値は拡縮率ではなく、実際に指定した大きさでコピーされる。 4 = 拡縮は矩形の中心を軸に行われる。 8 = 左右反転で描画 16 = 上下反転で描画 これを組み合わせて指定することができる。 ;例) dginit dgscreen 640, 480, 1, 16 dgloadfname "sample.bmp", 1 dggsel 0 dgpos 0, 0 dgrect 0, 0, 64, 64 dgscaleandangle 128, 128, 256 dgblend 1 *main await 0 dgcolor 0, 0, 0, 0 dgclear dgcolor 255, 255, 255, 128 ddgcopy 1, 3 ;座標(0,0)の位置を中心にして128*128の大きさの半透明で表示される。 dgredraw goto *main
初めて使うので文法が間違っていたりなにか勘違いしているのかもしれません。
全くわからなかったので質問させていただきました。
もしできないようならばpngの連番も手かなと考えおります。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101642への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.