メッセージで使用スクリプトを教えてくれると参考になります


2019年12月31日

Bitmapのピクセル情報のポインタ

ある依頼のパフォーマンス改善のためにいろいろ調べていたところ、BItmapクラスのピクセル情報をダイレクトに取得する方法を見つけました。

開発者向けの内容なので興味のある方は追記へ

DL.dlwrapを用いてBitmapオブジェクトのポインタを取得し、アドレスらしきバイナリデータを虱潰しに探してピクセル情報にたどり着きました。以下のスクリプトでDL::CPtrオブジェクトとしてピクセル情報を取得できます。

class Bitmap
def get_ptr
addr = DL.dlwrap(self) + 16
cptr = DL::CPtr.new(addr)
addr = (cptr[0,4].unpack("i"))[0] + 8
cptr.free
cptr = DL::CPtr.new(addr)
addr = (cptr[0,4].unpack("i"))[0] + 16
cptr.free
cptr = DL::CPtr.new(addr)
addr = (cptr[0,4].unpack("i"))[0]
cptr.free
cptr = DL::CPtr.new(addr, width * height * 4)
end
end
この発見によりVXAceでの表現の幅が広がると思います。DLLとの相性が抜群でポインタを引数渡してやればいろいろできます。この応用でTilemapクラスとWindowクラスのピクセル情報を取得できるようになればもっと効率が上がるでしょう。このスクリプトを使ったものを公開する方はご一報もらえるとうれしいです。
posted by USK at 23:59| Comment(0) | RGSS3
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: