04.10.28-04.11.07

Metal - plot、dplot、copyrect(単点)速度比較

このページについて

METAL バージョン1.7.3を使用しています。
METALで画像ビューワーを作ろうと思い、色々試しています。表示している画像を回転させたいのですが、回転コピーのような命令は見当たりません(見つけてないだけで実際にはあるのかも知れません)。仕方ないのでドットを1つずつコピーしていくことで回転させようとしました。Metalでドットをコピーするにはいくつか方法があり、速い方法が分かるにこしたことはないので、まずはかかる時間を計ってみることにしました。

シンプルな画像ビューワー

'最も単純なビューワー
    sw = screen width : sh = screen height
    p_img$ = open dialog$
    get quicktime pict size p_img$,iw,ih
    resize console (sw-iw)/2,(sh-ih)/2,(sw+iw)/2,(sh+ih)/2
    load quicktime pict p_img$

pixel_simplestviewer.txt
単純な画像ビューワーです。オープンダイアログで選択した画像ファイルを表示して終了します。

consoleかvirtual screenか

load quicktime pictで画像を読み込む場合。consoleウインドウに直接読み込むのと、init screenでvirtual screenを確保してから画像を読み込んで、consoleにcopyrectするのと、どちらが速いのか比較。

'console
    set screen to console
    load quicktime pict p_img$

'virtual screen
    buf = init screen(0,0,iw,ih)
    set screen to buf
    load quicktime pict p_img$
    copyrect 0,0,iw,ih,0,0,iw,ih,0,buf,0

pixel_console_vs_virtual.txt
ほとんどの場合それほど差はないのですが、自分の環境ではなぜかjpegとmpegに限り、上の方がかなり遅くなります(ハードに問題があるのかも知れません)。

plot、dplot、copyrect(単点)速度比較

'plot
    get pixel x,y,r,g,b
    forecolor r,g,b
    plot ih-y,x

'dplot
    get pixel x,y,r,g,b
    set dport to console
    dport color r,g,b
    dplot ih-y,x

'copyrect
    copyrect x,y,x+1,y+1,ih-y,x,ih-y+1,x+1,0,buf,buf2

pixel_copyrect_vs_dplot.txt
ファイルダイアログで開いた画像を使って右90度回転表示します。plot、dplot、copyrectを使ってconsoleに直接表示した場合と、それぞれをvirtual screen上で回転した後consoleにcopyrectした場合にかかった時間を表示します。
自分の環境ではこういう結果になりました。dplotでconsoleに直接転送するのが一番速かったです。
dplot < dplot(BG) < plot(BG) < plot < copyrect(BG) < copyrect