[ruby-list:43670] [Q] RMagick multi crop

From: Hiroki Kashiwazaki <reo@...>
Date: 2007-06-29 01:47:48 UTC
List: ruby-list #43670
柏崎@北海道です.

RMagick の話は RMagick でやれとか言われる事覚悟で ruby-list に投げ
させていただきます.Windows で One-Click Ruby 1.8.6-25 と RMagick
1.14.1 を使っています.2560x1920 の PNG 画像の矩形抽出 (crop) や平
行移動 (roll) を行っていて以下のような現象に遭遇しました.

crop(x1, y1, w1, h1) は画像の左上点 (x1, y1) から w1 × h1の範囲を
切りぬいた Image を返すメソッドです.

  require 'RMagick'
  include Magick
  
  img = Image.read("hoge.png")
  
  p img.columns #=>
  p img.rows    #=>
  
  case_img = img[0].crop(0, 400, 2560, 1200)
  p case_img.columns #=> 2560
  p case_img.rows    #=> 1200
  
 case_img2 = img[0].crop(0, 400, 2560, 1200).crop(0, 200, 2560, 400)
  p case_img2.columns #=> 2560
  p case_img2.rows    #=> 200


case_img は 2560x1200 なので,それに対して crop(0, 200, 2560, 400)
をすると,case_img の上部 2560x400 の Image が切り出せる事を期待して
いたのですが,そうはならずになぜか 2560x200 の画像が出力されます.

write して実際に画像を確認したところ,case_img の上部 2560x200 が切
り取られた画像でした.どうも二度めの crop(x2, y2, w2, h2) の y2 と 
h2 に依存しているようですが,いろいろいじってみるとその他の変数にも
(x1, y1, w1, h1 にも) 絡んでいるようで謎です.

そもそも crop(0, 400, 2560, 1200).crop(0, 200, 2560, 400) して 2560x
200 の画像が出力されるのが「おかしくない」のではないかと考えて悶絶し
ているところですが,皆様からの情報をお寄せ頂ければ幸いです.

-- 
柏崎 礼生 (Hiroki Kashiwazaki)@HUIST
Assistant Professor @ Graduate School of Information Science and
Technology, Hokkaido University
mailto:reo@iic.hokudai.ac.jp
Tel:+81-11-706-2056 (Office), +81-11-706-2998 (Takai Lab.)

In This Thread

Prev Next