xelf.eye.lua for mdiapp 1.00h

機能

 いくつかの新規レイヤーを自動的に追加して目玉を描画します。

用法

 生成したいサイズのドキュメント(空でよい)を用意して実行します。

コメント

 描きこみしやすさをイメージしてレイヤー構成を検討していたものに変更しました。更新されたAPIでも消しゴムを再現する方法の有無が不明であったため、スクリプト上定義の関数のため遅いのですが画素単位の処理を加えました。
 おまけでハイライトがつきました。

-- 目玉 for mdiapp 1.00h
-- xelf.eye.lua (C)2006-09-10〜2006-09-14 XELF

function EraseRectangle(destLayer,srcLayer,left,top,width,height)
	local k = 0.00392156863
	local right, bottom = left+width, top+height
	for y=top,bottom do
		for x=left,right do
			local sr,sg,sb,sa=mdi_img32_pixelget(srcLayer, x, y)
			local dr,dg,db,da=mdi_img32_pixelget(destLayer, x, y)
			mdi_img32_pixelcopy(destLayer, x, y, dr,dg,db,da*(1-sa*k))
		end
	end
end

local w1, h1 = mdi_width(), mdi_height()
local w2, h2 = w1*0.500, h1*0.500
local w3, h3 = w1*0.250, h1*0.250
local w4, h4 = w1*0.100, h1*0.100
local cx, cy = w1*0.500, h1*0.500
local r1,g1,b1,a1 = 255,255,255,255
local r2,g2,b2,a2 = 128,128,255,255
local r3,g3,b3,a3 =   0,  0,  0,255
mdi_undo_all();
local layer0 = mdi_layer_add(32)
local layer1 = mdi_layer_add(32)
local layer2 = mdi_layer_add(32)
local layer3 = mdi_layer_add(32)
local i0,i1,i2 = mdi_img_layer(layer0), mdi_img_layer(layer1), mdi_img_layer(layer2)
local i3 = mdi_img_layer(layer3)
local o0 = mdi_img_offscreen(0)
mdi_img32_resize(o0, w1, h1)
mdi_img32_ellipse(i1, cx-w1/2, cy-h1/2, w1, h1, r1, g1, b1, a1)
mdi_img32_ellipse(i0, cx-w1/2, cy-h1/2, w1, h1, r2, g2, b2, a2)
mdi_img32_ellipse(i2, cx-w3/2, cy-h3/2, w3, h3, r3, g3, b3, a3)
mdi_img32_ellipse(o0, cx-w3/2, cy-h3/2, w3, h3, 0, 0, 0, 255)
EraseRectangle(i0,o0,0,0,w1,h1)
mdi_img32_ellipse(o0, cx-w2/2, cy-h2/2, w2, h2, 0, 0, 0, 255)
EraseRectangle(i1,o0,0,0,w1,h1)
mdi_img32_ellipse(i3, cx+(cx/4), cy-(cy/4), w4, h4, 255, 255, 255, 255)