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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0915
coingrotateでの回転ではギザギザします5解決


coin

リンク

2007/9/15(Sat) 15:28:13|NO.11071

 こんにちは、お邪魔いたします。
 grotateで、画像をくるくる回したく、以下のようなソースを組んでみました。


screen 0,800,600
#include "hspmath.as" buffer 1 picload dir_exe+"/sample/demo/jp6girl.bmp" gsel 0 pos 100,100 roll=0 gmode 0,280,480 *rep grotate 1,0,0,deg2rad(roll) roll+ wait 10 goto *rep

 すると、ひどくギザギザしてしまいます。
 (もともと回転させようとしていた画像では、ピクセルはずれるわガタガタだわで、
  さらに酷い状況に。)
 現在のログから「回転」で検索すると拝見できる、NO.4335からの一連の記事を参考に
できるかと思ったのですが、どういじったらいいものか…。
 アンチエイリエスをかけたりできればいいのですが、これはもう、仕様だと納得する
のが一番なのでしょうか……。



この記事に返信する


kz3

リンク

2007/9/15(Sat) 22:11:55|NO.11076

>NO.4335からの一連の記事を参考にできるかと思ったのですが、どういじったらいいものか…。

いじる必要ってペタっと貼ってF5で実行してみるだけじゃないかな?(自己責任で)
モジュールの使い方が分からないときはプログラミングガイドの「モジュール」を読んでみるといいかも。
簡単に言えば #module 〜 #deffunc ??? 〜 #global の範囲をコピーしてスクリプトの上の方に貼り付ける。
そうすれば #deffunc ??? の ??? の部分が新しい命令として使えるよ。

HSP3.1からはhspcv.dllにcvrotateっていう命令も追加されているみたいだよ。
hspcvのsampleディレクトリにcvrotate命令を使ったサンプルがあるけどtest.aviを再生してみても真っ黒でよく分からないサンプルだったからちょっと書いてみたの。
; cvrotate命令サンプル
#include "hspcv.as" fname = dir_exe+"/sample/demo/jp6girl.bmp" cvload fname, 0 ; 元画像の読み込み cvgetinfo gx, 0, CVOBJ_INFO_SIZEX cvgetinfo gy, 0, CVOBJ_INFO_SIZEY cx = (gy-gx)/2: cy = (gy-gy)/2 screen 0, gy, gy buffer 1, gy, gy: cls 4 ; 真っ黒バッファ cvbuffer 1, gy, gy ; 回転用cvバッファ cvarea 0, 0, gx, gy ang = 0.0 repeat await 16 redraw 0 ang += 0.5: if ang = 360.0: ang = 0.0 /* 回転コピー */ gsel 1: cvputimg 1 cvcopy 0, cx, cy, 1, CVCOPY_SET cvrotate ang, 1.0, 0.0, 0.0, CV_INTER_LINEAR|CV_WARP_FILL_OUTLIERS, 1 gsel 0: cvgetimg 1 redraw 1 loop
透過コピーとかはbufferと併用していかないとダメっぽくて位置の指定とかも一筋縄ではいかないみたいだから工夫が必要だよ。



osakana

リンク

2007/9/16(Sun) 00:24:23|NO.11078

hspcv は結構癖がある印象ですね。
書いてるうちにもっと簡単なやり方があるのではと心配になってきましたが
一応少しでも参考になる事を祈りつつ。


#include "hspcv.as" // 読み込み dialog "",16 :if stat = 0 :end exist refstr :if strsize = -1 :end cvload refstr,0 :if stat ! 0 :end // サイズ取得 cvgetinfo sizex,0,CVOBJ_INFO_SIZEX :sizex=double(sizex) cvgetinfo sizey,0,CVOBJ_INFO_SIZEY :sizey=double(sizey) winx=double(GINFO_WINX) winy=double(GINFO_WINY) // 画像がウィンドウ内に納まるかな〜処理 if (winy/winx) >= (sizey/sizex) { x=winx :y=sizey/sizex*winx } else { y=winy :x=sizex/sizey*winy } cvresize x,y,0 // ウィンドウぴったりに拡大縮小 cvbuffer 1,winx,winy // メイン画像回転用バッファ cvbuffer 2,winx,winy // マスク画像コピー元バッファ cvxors 255,255,255,2 // マスクの色 cvbuffer 3,winx,winy // マスク回転用バッファ cvarea 0,0,x,y buffer 1,winx,winy // 回転用バッファの転送先 buffer 2,winx*2,winy // ピクセルアルファーブレンドコピー用バッファ buffer 3,winx,winy // メインウィドウの背景用バッファ // 適当に背景作成して見る repeat 10 :cy=cnt repeat 10 :cx=cnt color 127-(cx+cy&1)*63,127+(cx+cy&1)*127,255 boxf cx*winx/10,cy*winy/10,cx*winx/10+winx/10,cy*winy/10+winy/10 loop loop repeat redraw 0 // 画像回転 cvbuffer 1,winx,winy cvcopy 0,(winx-x)/2,(winy-y)/2,1,CVCOPY_SET cvrotate cnt\360,1.0,0.0,0.0,,1 // マスク回転 cvbuffer 3,winx,winy cvcopy 2,(winx-x)/2,(winy-y)/2,3,CVCOPY_SET cvrotate cnt\360,1.0,0.0,0.0,,3 // ピクセルアルファーブレンド用のバッファ準備 gsel 1 :cvgetimg 1 gsel 2 :pos 0,0 :gcopy 1,0,0,winx,winy gsel 1 :cvgetimg 3 gsel 2 :pos winx,0 :gcopy 1,0,0,winx,winy // メインウィンドウにコピー gsel 0 pos 0,0 gmode 0 :gcopy 3,0,0,winx,winy // 背景画像(通常コピー) gmode 7 :gcopy 2,0,0,winx,winy // メイン画像(ピクセルアルファーブレンド) redraw 1 await 30 loop



coin

リンク

2007/9/17(Mon) 16:08:03|NO.11096

 kz3さま、osakanaさま、ありがとうございます!
 hspcv…念頭にありませんでした…。すごく綺麗な回転ができました!
 お二方のおかげで、とても上手くいきました!本当にありがとうございました!


 どなたの参考になるかわかりませんので、どういう風にしたのかを述べておきます。
 実際に回転に使用したのは縦・横の長さの同じ画像でした。
 画像の背景は白で、貼り付ける先の画面も白です。画像は、円形の装飾のあるイラストで。
 osakanaさまのソースを実践に移してみたところ、回転中に画像のふちの線がかすかに
見えてしまいました。
 なので、マスク用画像を、円形にそって作ってみました。
 お二方のソースを元に、以下のようにしてみました。
 (china500-2.jpg:http://1rg.org/up/49279.jpg.html
 (china500-2-mask-2.gif:http://1rg.org/up/49280.gif.html

#include "hspcv.as"
cvbuffer 0,591,591 cvbuffer 1,591,591 cvload "china500-2.jpg", 1 buffer 1,591*2,591 pos 591,0:picload "china500-2-mask-2.gif",1 screen 0,800,600 angle=0.0 repeat redraw 0 if angle=360.0:angle=0.0 cvsel 0 cvcopy 1,0,0 cvrotate angle,1.0,0.0,0.0,,0 gsel 1:cvgetimg 0,0 gsel 0 pos -250,265 gmode 7,591,591 gcopy 1,0,0,591,591 angle=angle+0.1 redraw 1 wait 1 loop


 長々とすみませんでした。
 ありがとうございました。



kz3

リンク

2007/9/18(Tue) 23:25:46|NO.11115

すごく綺麗な回転ですね!



coin

リンク

2007/9/20(Thu) 23:05:25|NO.11132

 おふたりのおかげですvv 本当にありがとうございました!



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