Class: Rixmap::Format::XPM::XPMImageIO

Inherits:
ImageIO::BaseImageIO show all
Defined in:
lib/rixmap/format/xpm.rb

Overview

XPM形式用入出力実装クラス.

XPM1とXPM2の出力を分けたり、読み込み時に自動判定したりします.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ImageIO::BaseImageIO

#open, #read, #readable?, #save, #writable?, #write

Constructor Details

#initialize(options = {}) ⇒ XPMImageIO

Returns a new instance of XPMImageIO.

Parameters:

  • options (Hash) (defaults to: {})

    オプションパラメータ

Options Hash (options):

  • :version (Symbol, Integer, String)

    処理する際のバージョン. (default: auto) 指定できる値は以下の通り.

    • :auto
    • :xpm1
    • :xpm2
    • 0 (:autoと同じ)
    • 1 (:xpm1と同じ)
    • 2 (:xpm2と同じ)


373
374
375
376
377
378
379
380
381
382
# File 'lib/rixmap/format/xpm.rb', line 373

def initialize(options = {})
  super(options)

  @version = :auto unless defined?(@version)
  # 書き込み時の指定とかどうしよう

  # インスタンスは初期化しておく
  @xpm1iio = XPM1ImageIO.new(options)
  @xpm2iio = XPM2ImageIO.new(options)
end

Class Method Details

.readable?(magic) ⇒ Boolean

指定データがXPM1またはXPM2で読み込めるかどうかを調べます.

XPM1形式が優先されます.

Parameters:

  • magic (String)

    先頭バイトデータ

Returns:

  • (Boolean)

    XPM形式で読み込める場合はtrue



348
349
350
# File 'lib/rixmap/format/xpm.rb', line 348

def self.readable?(magic)
  return XPM1ImageIO.readable?(magic) || XPM2ImageIO.readable?(magic)
end

.writable?(image) ⇒ Boolean

指定画像がXPM1またはXPM2で書き込めるかを判定します.

XPM1形式が優先されます.

Parameters:

Returns:

  • (Boolean)

    XPM形式で書き込める場合はtrue



358
359
360
# File 'lib/rixmap/format/xpm.rb', line 358

def self.writable?(image)
  return XPM1ImageIO.writable?(image) || XPM2ImageIO.writable?(image)
end

Instance Method Details

#decode(data, options = {}) ⇒ Rixmap::Image

画像をバイト列から復元します.

Parameters:

  • data (String)

    バイト列

  • options (Hash) (defaults to: {})

    オプションパラメータ

Options Hash (options):

  • :version (Symbol, Integer, String)

    エンコードバージョン. 値は #initialize を参照のこと

Returns:

See Also:



417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
# File 'lib/rixmap/format/xpm.rb', line 417

def decode(data, options={})
  version = if options[:version].nil?
              @version
            else
              options[:version]
            end

  case version
  when 0, 1, :xpm1, :auto
    return @xpm1iio.decode(data, options)
  when 2, :xpm2
    return @xpm2iio.decode(data, options)
  else
    raise NotImplementedError.new("XPM Version #{version} is not implemented")
  end
end

#encode(image, options = {}) ⇒ String

画像をバイト列にエンコードします.

Parameters:

  • image (Rixmap::Image)

    対象画像

  • options (Hash) (defaults to: {})

    オプションパラメータ

Options Hash (options):

  • :version (Symbol, Integer, String)

    エンコードバージョン. 値は #initialize を参照のこと

Returns:

  • (String)

    バイト列

See Also:



392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
# File 'lib/rixmap/format/xpm.rb', line 392

def encode(image, options={})
  version = if options[:version].nil?
              @version
            else
              options[:version]
            end

  case version
  when 0, 1, :xpm1, :auto
    return @xpm1iio.encode(image, options)
  when 2, :xpm2
    return @xpm2iio.encode(image, options)
  else
    raise NotImplementedError.new("XPM Version #{version} is not implemented")
  end
end