Ruby200 发表于 2013-11-10 02:02:51

分享一种位图画圆角矩形和普通矩形的方法

本帖最后由 Ruby200 于 2013-11-10 12:41 编辑



用法,
bitmap.draw_round_box 左上角x, 左上角y, 右下角x, 右下角y, 颜色, [作为左上角的圆角模型数组,可以省略(见代码中的那个缺省参数)]
如果最后一个参数填[],那么就是普通矩形
关于set_pixel可能太慢的问题。。在这里应该不影响太多,毕竟满打满算一般也就是640*2+480*2不算很大。而且如果用VA其实很快。

class Bitmap
def draw_round_box(x1, y1, x2, y2, color, pattern = [
      "...",#空格是不画,非空格字符都是要画点的
      " ..",#可以用半角空格' '或者全角空格' ',如果不确定是哪个就复制前面引号里的
      "..   ",
      ".    ",
      ".    ",
    ]
    )
    yd = pattern.size
    xd = (pattern || "").size
    w = x2 - x1 - 2*xd
    h = y2 - y1 - 2*yd
    fill_rect(x1+xd, y1, w, 1, color)
    fill_rect(x1, y1+yd, 1, h, color)
    fill_rect(x2 - 1, y1+yd, 1, h, color)
    fill_rect(x1+xd, y2 - 1, w, 1, color)
    xd.times{|ox|
      yd.times{|oy|
       if (pattern.index(' ')!=0 && pattern.index(' ')!=0)#这一行修正为XPVXVA通用。。感谢P叔
          set_pixel(x1+ox, y1+oy, color)
          set_pixel(x2-ox-1, y1+oy, color)
          set_pixel(x2-ox-1, y2-oy-1, color)
          set_pixel(x1+ox, y2-oy-1, color)
      end
      }
    }
end
end

测试用脚本:Main之前任意位置
   x = Sprite.new
    x.bitmap = Bitmap.new(300, 300)
    x.bitmap.draw_round_box(0, 0, 299, 299, Color.new(255, 0, 0, 255))
    until false

Sonic1997 发表于 2013-11-10 06:50:29

pattern = [
      "我是圆角!空格是不画,非空格字符都是要画兰兰兰兰兰兰兰兰兰兰兰兰兰",
      "兰兰兰兰 兰兰兰兰兰兰兰 兰兰兰兰兰兰 兰兰兰兰兰兰兰 兰兰兰兰兰",
      "兰兰兰兰兰 兰兰兰兰兰兰 兰兰兰兰兰兰 兰兰兰兰兰兰兰 兰兰兰兰兰",
      "兰兰兰兰兰兰 兰兰兰兰 兰兰兰兰兰兰    兰兰兰兰兰 兰兰兰兰兰",
      "兰兰兰兰兰兰 兰兰兰 兰兰兰兰兰兰兰 兰兰 兰兰       兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰 兰兰 兰兰兰 兰兰 兰兰 兰兰",
      "兰兰             兰兰兰     兰 兰兰 兰兰 兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰 兰 兰 兰 兰兰 兰兰 兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰 兰 兰 兰 兰兰 兰兰 兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰     兰       兰兰",
      "兰兰兰           兰兰兰兰 兰 兰 兰 兰兰 兰兰 兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰 兰 兰 兰兰兰兰 兰兰兰兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰     兰兰兰兰 兰 兰兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰 兰 兰 兰兰兰兰 兰兰 兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰 兰 兰          兰",
      "兰兰             兰兰兰 兰 兰 兰 兰兰兰兰兰兰 兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰 兰兰兰  兰兰兰兰兰兰兰兰兰兰",
      "兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰兰的",
    ]
页: [1]
查看完整版本: 分享一种位图画圆角矩形和普通矩形的方法