0

に基づいてモンタージュを作成するには、次のブロックを適応させる必要があります@item.type。これを実現するには、ブロックの内容を個別に変更する必要があり@item.typeます。

list = Magick::ImageList.new(@item.images)
montage = list.montage do
  self.geometry = Magick::Geometry.new(130, 194, 10, 5)
  self.geometry = Magick::Geometry.new(4,10)
end
montage.write("name.jpg")

次のメソッドに応じて@item.type、必要な場合と必要でない場合があり、提供される値は異なります: (必要な場合がありますself.fooが、必要ないself.geometry場合など)

self.geometry = Magick::Geometry.new(130, 194, 10, 5)
self.tiles = Magick::Geometry.new(4,10)

これを行うための「Ruby Way」はif @item.type = 'this' ...何ですか?

4

1 に答える 1

1

必要なジオメトリのタイプを放出するためのメソッドをアイテムに与えるのはどうですか?

montage = list.montage do
  self.geometry = Magick::Geometry.new(*@item.geometry)
end

次に、ジオメトリを発行するメソッドがあります。

def geometry
  [ 4, 10 ]
end

更新:プレゼンター タイプのクラスを使用します。

class Item
  def render_helper
    ItemRenderHelper.new(self)
  end
end

class ItemRenderHelper
  def initialize(item)
    @item = item
  end

  def render(context)
    context.geometry = Magick::Geometry.new(130, 194, 10, 5)
    context.tiles = Magick::Geometry.new(4, 10)
  end
end

class OtherItem
  def render_helper
    OtherItemRenderHelper.new(self)
  end
end

class OtherItemRenderHelper
  def initialize(other_item)
    @other_item = other_item
  end

  def render(context)
    context.geometry = Magick::Geometry.new(...)
    context.tiles = Magick::Geometry.new(...)
    context.other_method(...)
  end
end

次に、これらを適用できます。

montage = list.montage do
  @item.render_helper.render(self)
end
于 2013-05-23T17:08:57.087 に答える