他用黑底白點的骰子。

模拟出一張人像照片。
把圖像放大,就可以看得更清楚。
他一共用了2500多顆骰子。
最後的成品就是這樣。
具體來說,
第一步,将圖檔分割成16像素x16像素的小方塊。
for (int i=0; i < (pic_width/16); ++i) { for (int j=0; j < (pic_height/16); ++j) { patch = cropped_img.get(i*16, j*16, 16, 16); } }
第二步,每個小方塊内共有256個像素,将每個像素點的灰階值,存入一個數組。
for (int k=0; k < patch.pixels.length; ++k) { x[k] = rgb2gray(patch.pixels[k]); int rgb2gray(int argb) { int _alpha = (argb >> 24) & 0xff; int _red = (argb >> 16) & 0xff; int _green = (argb >> 8 ) & 0xff; int _blue = (argb) & 0xff; return int(0.3*_red + 0.59*_green + 0.11*_blue);
第三步,計算該數組的平均值,并用1-6之間的一個整數來表示。
int dice_num = six_step_gray(mean(x)); int mean(int[] x) { float m = 0; for (int i=0; i < x.length; ++i) { m += x[i]; m = m/x.length; return int(m); int six_step_gray(int x) { if (0 <= x && x <= 41) return 1; if (41 < x && x <= 83) return 2; if (83 < x && x <= 124) return 3; if (124 < x && x <= 165) return 4; if (165 < x && x <= 206) return 5; if (206 < x && x <= 247) return 6; else return 6; }
整數1,表示骰子朝上的一面有1個白點;整數2,表示有2個白點;以此類推。白點越少,表示這個區域越接近全黑;白點越多,表示越接近全白。根據白點值,将骰子依次放入,就能模拟出全圖。
如果區域劃分得越小,模拟圖的生成效果就越好。
(完)