54 lines
1.2 KiB
Plaintext
54 lines
1.2 KiB
Plaintext
func my_draw_line(img, x0, y0, x1, y1) {
|
|
|
|
var steep = (abs(y1 - y0) > abs(x1 - x0))
|
|
|
|
if (steep) {
|
|
(y0, x0) = (x0, y0)
|
|
(y1, x1) = (x1, y1)
|
|
}
|
|
if (x0 > x1) {
|
|
(x1, x0) = (x0, x1)
|
|
(y1, y0) = (y0, y1)
|
|
}
|
|
|
|
var deltax = (x1 - x0)
|
|
var deltay = abs(y1 - y0)
|
|
var error = (deltax / 2)
|
|
var y = y0
|
|
var ystep = (y0 < y1 ? 1 : -1)
|
|
|
|
x0.to(x1).each { |x|
|
|
img.draw_point(steep ? ((y, x)) : ((x, y)))
|
|
error -= deltay
|
|
if (error < 0) {
|
|
y += ystep
|
|
error += deltax
|
|
}
|
|
}
|
|
}
|
|
|
|
require('Image::Imlib2')
|
|
|
|
var img = %s'Image::Imlib2'.new(160, 160)
|
|
img.set_color(255, 255, 255, 255) # white
|
|
img.fill_rectangle(0,0,160,160)
|
|
|
|
img.set_color(0,0,0,255) # black
|
|
my_draw_line(img, 10, 80, 80, 160)
|
|
my_draw_line(img, 80, 160, 160, 80)
|
|
my_draw_line(img, 160, 80, 80, 10)
|
|
my_draw_line(img, 80, 10, 10, 80)
|
|
|
|
img.save("test0.png");
|
|
|
|
# let's try the same using its internal algo
|
|
img.set_color(255, 255, 255, 255) # white
|
|
img.fill_rectangle(0,0,160,160)
|
|
img.set_color(0,0,0,255) # black
|
|
img.draw_line(10, 80, 80, 160)
|
|
img.draw_line(80, 160, 160, 80)
|
|
img.draw_line(160, 80, 80, 10)
|
|
img.draw_line(80, 10, 10, 80)
|
|
|
|
img.save("test1.png")
|