Все 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
  #-----------------------------------------------------------------------------