xelf.pointillist.lua for mdiapp1.00f

用法

 最下層に32bppの元画像を置き、その上のレイヤーに32bppで描画先を用意して実行しましょう。

修正版

id:mdiappさんに直接スクリプトのバグをご指摘いただきました。気づかず申しわけありませんでした。

-- 点描家 for mdiapp 1.00f
-- xelf.pointillist.lua (C)2006-09-10 XELF
mdi_undo_all();
local sourceImage = mdi_img_layer(0);
local image = mdi_img_layer(1);
local w, h = mdi_width(), mdi_height();
local r1 = 2;
local r2 = r1 * 2;
for i = 0,5000 do
	local x, y = math.random()*w, math.random()*h;
	local r,g,b,a = mdi_img32_pixelget(sourceImage, x, y);
	mdi_img32_ellipse(image, x-r1, y-r1, r2, r2, r,g,b,a);
end

不具合(オリジナル)版

 どうも1.00fに不具合がありそうです。ある程度の動作はしますが期待通りの挙動ではありません。
スクリプトのバグでした。
 ちなみに蛇足ですが、この種のミスはVC#ですと、「ローカルの変数 'r' をこのスコープで宣言することはできません。これは、'親またはカレント' スコープで別の意味を持つ 'r' の意味が変更されるのを避けるためです。」となるので回避できます。このようなコンパイラサポートの有無が本格的開発が可能な環境かどうか大きく左右してしまいますね。

-- 点描家 for mdiapp 1.00f
-- xelf.pointillist.lua (C)2006-09-10 XELF
mdi_undo_all();
local sourceImage = mdi_img_layer(0);
local image = mdi_img_layer(1);
local w, h = mdi_width(), mdi_height();
local r = 2;
local r2 = r * 2;
for i = 0,5000 do
	local x, y = math.random()*w, math.random()*h;
	local r,g,b,a = mdi_img32_pixelget(sourceImage, x, y);
	mdi_img32_ellipse(image, x-r, y-r, r2, r2, r,g,b,a);
end