Все 4 метода - реализация оных из VX.
На рассмотрение предлагаю следующие:
Код:
#----------------------------------------------------------------------------
# Возвращает отраженное изображение
# Возвращает :bitmap
# horizontal :boolean - изображение будет отражено по горизонтали
# vertical :boolean - изображение будет отражено по вертикали
#----------------------------------------------------------------------------
def mirror (horizontal = true, vertical = false)
source = self
if horizontal
bitmap = Bitmap.new(source.width, source.height)
for i in 0...source.width
bitmap.blt(i, 0, source, Rect.new(source.width - 1 - i, 0, 1, source.height))
end
source = bitmap
end
if vertical
bitmap = Bitmap.new(source.width, source.height)
for i in 0...source.height
bitmap.blt(0, i, source, Rect.new(0, source.height - 1 - i, source.width, 1))
end
source = bitmap
end
return source
end
#----------------------------------------------------------------------------
# Изменяет размер изображения
# Возвращает :bitmap
# width :integer {1~+x) - итоговая ширина изображения
# height :integer {1~+x) - итоговая высота изображения
# stretch :boolean - будет ли исходное изображение растянуто или сжато
# background :color - цвет фона
#----------------------------------------------------------------------------
def resize (width, height, stretch = true, background = nil)
bitmap = Bitmap.new(width, height)
bitmap.font = self.font
if stretch
bitmap.stretch_blt(Rect.new(0, 0, width, height), self, self.rect)
else
bitmap.fill_rect(0, 0, width, height, background) if background
bitmap.blt(0, 0, self, Rect.new(0, 0, self.width, self.height))
end
return bitmap
end
#-----------------------------------------------------------------------------
Социальные закладки