gd2-ffij 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ begin
10
10
  require 'jeweler'
11
11
  Jeweler::Tasks.new do |gem|
12
12
  gem.name = "gd2-ffij"
13
- gem.version = "0.0.2"
13
+ gem.version = "0.0.3"
14
14
  gem.summary = "gd2-ffij is a refactoring of the Ruby/GD2 library implemented with FFI"
15
15
  gem.description = "gd2-ffij is a refactoring of the Ruby/GD2 library implemented with FFI"
16
16
  gem.email = "dark.panda@gmail.com"
data/gd2-ffij.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{gd2-ffij}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["J Smith"]
12
- s.date = %q{2010-03-13}
12
+ s.date = %q{2010-11-11}
13
13
  s.description = %q{gd2-ffij is a refactoring of the Ruby/GD2 library implemented with FFI}
14
14
  s.email = %q{dark.panda@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -75,7 +75,7 @@ Gem::Specification.new do |s|
75
75
  s.homepage = %q{http://github.com/dark-panda/gd2-ffij}
76
76
  s.rdoc_options = ["--charset=UTF-8"]
77
77
  s.require_paths = ["lib"]
78
- s.rubygems_version = %q{1.3.6}
78
+ s.rubygems_version = %q{1.3.7}
79
79
  s.summary = %q{gd2-ffij is a refactoring of the Ruby/GD2 library implemented with FFI}
80
80
  s.test_files = [
81
81
  "test/canvas_test.rb",
@@ -87,7 +87,7 @@ Gem::Specification.new do |s|
87
87
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
88
88
  s.specification_version = 3
89
89
 
90
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
90
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
91
91
  else
92
92
  end
93
93
  else
data/lib/gd2-ffij.rb CHANGED
@@ -24,17 +24,23 @@ require 'ffi'
24
24
  require 'rbconfig'
25
25
 
26
26
  module GD2
27
- VERSION = '0.0.1'.freeze
27
+ VERSION = '0.0.3'.freeze
28
28
 
29
29
  module GD2FFI
30
30
  def self.gd_library_name
31
- case Config::CONFIG['arch']
32
- when /darwin/
33
- 'libgd.2.dylib'
34
- when /mswin32/, /cygwin/
35
- 'bgd.dll'
31
+ if ENV['GD2_LIBRARY_PATH']
32
+ ENV['GD2_LIBRARY_PATH']
36
33
  else
37
- 'libgd.so.2'
34
+ lib = case Config::CONFIG['arch']
35
+ when /darwin/
36
+ [ '/usr/lib', '/usr/local/lib', '/opt/local/lib' ].detect { |path|
37
+ File.exists?("#{path}/libgd.2.dylib")
38
+ }.to_s + '/libgd.2.dylib'
39
+ when /mswin32/, /cygwin/
40
+ 'bgd.dll'
41
+ else
42
+ 'libgd.so.2'
43
+ end
38
44
  end
39
45
  end
40
46
 
data/lib/gd2/canvas.rb CHANGED
@@ -59,7 +59,7 @@ module GD2
59
59
 
60
60
  def draw(image, mode)
61
61
  GD2FFI.send(:gdImageLine, image.image_ptr,
62
- @p1.x, @p1.y, @p2.x, @p2.y, mode)
62
+ @p1.x.to_i, @p1.y.to_i, @p2.x.to_i, @p2.y.to_i, mode.to_i)
63
63
  nil
64
64
  end
65
65
  end
@@ -70,7 +70,7 @@ module GD2
70
70
  end
71
71
 
72
72
  def draw(image, mode)
73
- GD2FFI.send(draw_sym, image.image_ptr, @p1.x, @p1.y, @p2.x, @p2.y, mode)
73
+ GD2FFI.send(draw_sym, image.image_ptr, @p1.x.to_i, @p1.y.to_i, @p2.x.to_i, @p2.y.to_i, mode.to_i)
74
74
  nil
75
75
  end
76
76
 
@@ -93,7 +93,7 @@ module GD2
93
93
  def draw(image, mode)
94
94
  GD2FFI.send(draw_sym, image.image_ptr, @points.map { |point|
95
95
  point.coordinates.pack('i_i_')
96
- }.join(''), @points.length, mode)
96
+ }.join(''), @points.length, mode.to_i)
97
97
  nil
98
98
  end
99
99
 
@@ -122,9 +122,9 @@ module GD2
122
122
  end
123
123
 
124
124
  def draw(image, mode)
125
- GD2FFI.send(:gdImageArc, image.image_ptr, @center.x, @center.y,
126
- @width, @height,
127
- @range.begin.to_degrees.round, @range.end.to_degrees.round, mode)
125
+ GD2FFI.send(:gdImageArc, image.image_ptr, @center.x.to_i, @center.y.to_i,
126
+ @width.to_i, @height.to_i,
127
+ @range.begin.to_degrees.round.to_i, @range.end.to_degrees.round.to_i, mode.to_i)
128
128
  nil
129
129
  end
130
130
  end
@@ -144,10 +144,10 @@ module GD2
144
144
  end
145
145
 
146
146
  def draw(image, mode)
147
- GD2FFI.send(:gdImageFilledArc, image.image_ptr, @center.x, @center.y,
148
- @width, @height,
149
- @range.begin.to_degrees.round, @range.end.to_degrees.round,
150
- mode, style)
147
+ GD2FFI.send(:gdImageFilledArc, image.image_ptr, @center.x.to_i, @center.y.to_i,
148
+ @width.to_i, @height.to_i,
149
+ @range.begin.to_degrees.round.to_i, @range.end.to_degrees.round.to_i,
150
+ mode.to_i, style.to_i)
151
151
  nil
152
152
  end
153
153
 
@@ -168,16 +168,16 @@ module GD2
168
168
  end
169
169
 
170
170
  def draw(image, mode)
171
- GD2FFI.send(:gdImageArc, image.image_ptr, @center.x, @center.y,
172
- @width, @height, 0, 360, mode)
171
+ GD2FFI.send(:gdImageArc, image.image_ptr, @center.x.to_i, @center.y.to_i,
172
+ @width.to_i, @height.to_i, 0, 360, mode.to_i)
173
173
  nil
174
174
  end
175
175
  end
176
176
 
177
177
  class FilledEllipse < Ellipse
178
178
  def draw(image, mode)
179
- GD2FFI.send(:gdImageFilledEllipse, image.image_ptr, @center.x, @center.y,
180
- @width, @height, mode)
179
+ GD2FFI.send(:gdImageFilledEllipse, image.image_ptr, @center.x.to_i, @center.y.to_i,
180
+ @width.to_i, @height.to_i, mode.to_i)
181
181
  end
182
182
  end
183
183
 
@@ -240,7 +240,7 @@ module GD2
240
240
  end
241
241
 
242
242
  def thickness=(thickness)
243
- GD2FFI.send(:gdImageSetThickness, @image.image_ptr, @thickness = thickness)
243
+ GD2FFI.send(:gdImageSetThickness, @image.image_ptr, @thickness = thickness.to_i)
244
244
  end
245
245
 
246
246
  def style=(ary)
@@ -331,14 +331,14 @@ module GD2
331
331
  end
332
332
 
333
333
  def fill
334
- GD2FFI.send(:gdImageFill, @image.image_ptr, @point.x, @point.y, fill_pixel)
334
+ GD2FFI.send(:gdImageFill, @image.image_ptr, @point.x.to_i, @point.y.to_i, fill_pixel.to_i)
335
335
  self
336
336
  end
337
337
 
338
338
  def fill_to(border)
339
339
  # An apparent bug in gd prevents us from using fill_pixel
340
- GD2FFI.send(:gdImageFillToBorder, @image.image_ptr, @point.x, @point.y,
341
- @image.color2pixel(border), pixel)
340
+ GD2FFI.send(:gdImageFillToBorder, @image.image_ptr, @point.x.to_i, @point.y.to_i,
341
+ @image.color2pixel(border), pixel.to_i)
342
342
  self
343
343
  end
344
344
 
@@ -405,9 +405,9 @@ module GD2
405
405
  elsif anti_aliasing?
406
406
  if @dont_blend
407
407
  GD2FFI.send(:gdImageSetAntiAliasedDontBlend, @image.image_ptr,
408
- pixel, @dont_blend)
408
+ pixel.to_i, @dont_blend.to_i)
409
409
  else
410
- GD2FFI.send(:gdImageSetAntiAliased, @image.image_ptr, pixel)
410
+ GD2FFI.send(:gdImageSetAntiAliased, @image.image_ptr, pixel.to_i)
411
411
  end
412
412
  ANTI_ALIASED
413
413
  else
data/lib/gd2/color.rb CHANGED
@@ -215,7 +215,7 @@ module GD2
215
215
  # Alpha blend this color with the given color. If this color is associated
216
216
  # with a palette entry, this also modifies the palette.
217
217
  def alpha_blend!(other)
218
- self.rgba = GD2FFI.send(:gdAlphaBlend, rgba, other.rgba)
218
+ self.rgba = GD2FFI.send(:gdAlphaBlend, rgba.to_i, other.rgba.to_i)
219
219
  self
220
220
  end
221
221
  alias << alpha_blend!
data/lib/gd2/font.rb CHANGED
@@ -58,7 +58,7 @@ module GD2
58
58
  angle == 0.degrees || angle == 90.degrees
59
59
 
60
60
  GD2FFI.send(angle > 0 ? :gdImageStringUp : :gdImageString, image_ptr,
61
- font_ptr, x, y, string, fg)
61
+ font_ptr, x.to_i, y.to_i, string, fg.to_i)
62
62
  nil
63
63
  end
64
64
  end
@@ -114,19 +114,17 @@ module GD2
114
114
  @@fontconfig = false
115
115
 
116
116
  def self.register(font) #:nodoc:
117
- Thread.critical = true
117
+ Thread.exclusive do
118
+ count = @@fontcount
119
+ @@fontcount += 1
118
120
 
119
- count = @@fontcount
120
- @@fontcount += 1
121
+ if count.zero?
122
+ raise FreeTypeError, 'FreeType library failed to initialize' unless
123
+ GD2FFI.send(:gdFontCacheSetup).zero?
124
+ end
121
125
 
122
- if count.zero?
123
- raise FreeTypeError, 'FreeType library failed to initialize' unless
124
- GD2FFI.send(:gdFontCacheSetup).zero?
126
+ ObjectSpace.define_finalizer(font, font_finalizer)
125
127
  end
126
-
127
- ObjectSpace.define_finalizer(font, font_finalizer)
128
- ensure
129
- Thread.critical = false
130
128
  end
131
129
 
132
130
  def self.font_finalizer
@@ -134,12 +132,10 @@ module GD2
134
132
  end
135
133
 
136
134
  def self.unregister
137
- Thread.critical = true
138
-
139
- @@fontcount -= 1
140
- GD2FFI.send(:gdFontCacheShutdown) if @@fontcount.zero?
141
- ensure
142
- Thread.critical = false
135
+ Thread.exclusive do
136
+ @@fontcount -= 1
137
+ GD2FFI.send(:gdFontCacheShutdown) if @@fontcount.zero?
138
+ end
143
139
  end
144
140
 
145
141
  private_class_method :font_finalizer, :unregister
@@ -253,7 +249,7 @@ module GD2
253
249
  def draw(image_ptr, x, y, angle, string, fg) #:nodoc:
254
250
  brect = FFI::MemoryPointer.new(:int, 8)
255
251
  strex = strex(true)
256
- args = [ image_ptr, brect, fg, @fontname, @ptsize, angle.to_f, x, y, string.gsub('&', '&amp;'), strex ]
252
+ args = [ image_ptr, brect, fg, @fontname, @ptsize, angle.to_f, x.to_i, y.to_i, string.gsub('&', '&amp;'), strex ]
257
253
 
258
254
  r = GD2FFI.send(:gdImageStringFTEx, *args)
259
255
  raise FreeTypeError.new(r.read_string) unless r.null?
@@ -290,9 +286,9 @@ module GD2
290
286
  top, bottom, fgcolor
291
287
  ) #:nodoc:
292
288
  r = GD2FFI.send(
293
- :gdImageStringFTCircle, image_ptr, cx, cy,
289
+ :gdImageStringFTCircle, image_ptr, cx.to_i, cy.to_i,
294
290
  radius.to_f, text_radius.to_f, fill_portion.to_f, @fontname, @ptsize,
295
- top || '', bottom || '', fgcolor
291
+ top || '', bottom || '', fgcolor.to_i
296
292
  )
297
293
  raise FreeTypeError.new(r.read_string) unless r.null?
298
294
  nil
data/lib/gd2/image.rb CHANGED
@@ -88,12 +88,14 @@ module GD2
88
88
  # automatically (JPEG, PNG, GIF, WBMP, or GD2). The resulting image will be
89
89
  # either of class Image::TrueColor or Image::IndexedColor.
90
90
  def self.load(src)
91
+ src = src.force_encoding("BINARY") if src.respond_to? :force_encoding
91
92
  case src
92
93
  when File
93
94
  pos = src.pos
94
95
  magic = src.read(4)
95
96
  src.pos = pos
96
97
  data = src.read
98
+ data = data.force_encoding("BINARY") if data.respond_to? :force_encoding
97
99
  args = [ data.length, data ]
98
100
  when String
99
101
  magic = src
@@ -124,16 +126,23 @@ module GD2
124
126
  end
125
127
 
126
128
  def self.data_type(str)
127
- case str
128
- when /\A\xff\xd8/
129
+ ct = 0
130
+ mgc = ""
131
+ str.each_byte do |byte|
132
+ break if ct == 4
133
+ mgc << byte.to_s
134
+ ct += 1
135
+ end
136
+ case mgc
137
+ when "255216255224"
129
138
  :jpeg
130
- when /\A\x89PNG/
139
+ when "137807871"
131
140
  :png
132
- when /\AGIF8/
141
+ when "71737056"
133
142
  :gif
134
- when /\A\x00/
143
+ when "001300"
135
144
  :wbmp
136
- when /\Agd2/
145
+ when "103100500"
137
146
  :gd2
138
147
  end
139
148
  end
@@ -173,7 +182,7 @@ module GD2
173
182
  raise ArgumentError, 'Missing required option :height' if height.nil?
174
183
  # TODO:
175
184
  ptr = File.open(filename, 'rb') do |file|
176
- GD2FFI.send(:gdImageCreateFromGd2Part, file, x, y, width, height)
185
+ GD2FFI.send(:gdImageCreateFromGd2Part, file, x.to_i, y.to_i, width.to_i, height.to_i)
177
186
  end
178
187
  else
179
188
  raise ArgumentError, "Unexpected options #{options.inspect}" unless
@@ -191,6 +200,7 @@ module GD2
191
200
  'Format (or file extension) is not recognized' unless create_sym
192
201
 
193
202
  file = File.read(filename)
203
+ file = file.force_encoding("BINARY") if file.respond_to? :force_encoding
194
204
  file_ptr = FFI::MemoryPointer.new(file.size, 1, false)
195
205
  file_ptr.put_bytes(0, file)
196
206
 
@@ -212,7 +222,7 @@ module GD2
212
222
  private_class_method :image_true_color?
213
223
 
214
224
  def self.create_image_ptr(sx, sy, alpha_blending = true) #:nodoc:
215
- ptr = FFIStruct::ImagePtr.new(GD2FFI.send(create_image_sym, sx, sy))
225
+ ptr = FFIStruct::ImagePtr.new(GD2FFI.send(create_image_sym, sx.to_i, sy.to_i))
216
226
  GD2FFI.send(:gdImageAlphaBlending, ptr, alpha_blending ? 1 : 0)
217
227
  ptr
218
228
  end
@@ -287,13 +297,13 @@ module GD2
287
297
 
288
298
  # Return the pixel value at image location (+x+, +y+).
289
299
  def get_pixel(x, y)
290
- GD2FFI.send(:gdImageGetPixel, @image_ptr, x, y)
300
+ GD2FFI.send(:gdImageGetPixel, @image_ptr, x.to_i, y.to_i)
291
301
  end
292
302
  alias pixel get_pixel
293
303
 
294
304
  # Set the pixel value at image location (+x+, +y+).
295
305
  def set_pixel(x, y, value)
296
- GD2FFI.send(:gdImageSetPixel, @image_ptr, x, y, value)
306
+ GD2FFI.send(:gdImageSetPixel, @image_ptr, x.to_i, y.to_i, value.to_i)
297
307
  nil
298
308
  end
299
309
 
@@ -400,7 +410,7 @@ module GD2
400
410
  clip = clipping
401
411
  begin
402
412
  p clipping
403
- GD2FFI.send(:gdImageSetClip, image_ptr, x1, y1, x2, y2)
413
+ GD2FFI.send(:gdImageSetClip, image_ptr, x1.to_i, y1.to_i, x2.to_i, y2.to_i)
404
414
  p clipping
405
415
  yield self
406
416
  self
@@ -411,7 +421,7 @@ module GD2
411
421
 
412
422
  # Return *true* if the current clipping rectangle excludes the given point.
413
423
  def clips?(x, y)
414
- GD2FFI.send(:gdImageBoundsSafe, image_ptr, x, y).zero?
424
+ GD2FFI.send(:gdImageBoundsSafe, image_ptr, x.to_i, y.to_i).zero?
415
425
  end
416
426
 
417
427
  # Provide a drawing environment for a block. See GD2::Canvas.
@@ -496,7 +506,7 @@ module GD2
496
506
  # compression (0 = none, 1 = minimal but fast, 9 = best but slow).
497
507
  def png(level = nil)
498
508
  size = FFI::MemoryPointer.new(:pointer)
499
- ptr = GD2FFI.send(:gdImagePngPtrEx, image_ptr, size, level || -1)
509
+ ptr = GD2FFI.send(:gdImagePngPtrEx, image_ptr, size, level.to_i || -1)
500
510
  ptr.get_bytes(0, size.get_int(0))
501
511
  ensure
502
512
  GD2FFI.send(:gdFree, ptr)
@@ -541,7 +551,7 @@ module GD2
541
551
  # The specified +fmt+ may be either GD2::FMT_RAW or GD2::FMT_COMPRESSED.
542
552
  def gd2(fmt = FMT_COMPRESSED, chunk_size = 0)
543
553
  size = FFI::MemoryPointer.new(:pointer)
544
- ptr = GD2FFI.send(:gdImageGd2Ptr, image_ptr, chunk_size, fmt, size)
554
+ ptr = GD2FFI.send(:gdImageGd2Ptr, image_ptr, chunk_size.to_i, fmt.to_i, size)
545
555
  ptr.get_bytes(0, size.get_int(0))
546
556
  ensure
547
557
  GD2FFI.send(:gdFree, ptr)
@@ -555,10 +565,10 @@ module GD2
555
565
  raise ArgumentError unless src_w.nil? == src_h.nil?
556
566
  if src_w
557
567
  GD2FFI.send(:gdImageCopyResampled, image_ptr, other.image_ptr,
558
- dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)
568
+ dst_x.to_i, dst_y.to_i, src_x.to_i, src_y.to_i, dst_w.to_i, dst_h.to_i, src_w.to_i, src_h.to_i)
559
569
  else
560
570
  GD2FFI.send(:gdImageCopy, image_ptr, other.image_ptr,
561
- dst_x, dst_y, src_x, src_y, dst_w, dst_h)
571
+ dst_x.to_i, dst_y.to_i, src_x.to_i, src_y.to_i, dst_w.to_i, dst_h.to_i)
562
572
  end
563
573
  self
564
574
  end
@@ -569,7 +579,7 @@ module GD2
569
579
  # may be floating point.
570
580
  def copy_from_rotated(other, dst_x, dst_y, src_x, src_y, w, h, angle)
571
581
  GD2FFI.send(:gdImageCopyRotated, image_ptr, other.image_ptr,
572
- dst_x.to_f, dst_y.to_f, src_x, src_y, w, h, angle.to_degrees.round)
582
+ dst_x.to_f, dst_y.to_f, src_x.to_i, src_y.to_i, w.to_i, h.to_i, angle.to_degrees.round.to_i)
573
583
  self
574
584
  end
575
585
 
@@ -579,7 +589,7 @@ module GD2
579
589
  # channel information from the source image is ignored.
580
590
  def merge_from(other, dst_x, dst_y, src_x, src_y, w, h, pct)
581
591
  GD2FFI.send(:gdImageCopyMerge, image_ptr, other.image_ptr,
582
- dst_x, dst_y, src_x, src_y, w, h, pct.to_percent.round)
592
+ dst_x.to_i, dst_y.to_i, src_x.to_i, src_y.to_i, w.to_i, h.to_i, pct.to_percent.round.to_i)
583
593
  self
584
594
  end
585
595
 
@@ -588,7 +598,7 @@ module GD2
588
598
  def rotate!(angle, axis_x = width / 2.0, axis_y = height / 2.0)
589
599
  ptr = self.class.create_image_ptr(width, height, alpha_blending?)
590
600
  GD2FFI.send(:gdImageCopyRotated, ptr, image_ptr,
591
- axis_x.to_f, axis_y.to_f, 0, 0, width, height, angle.to_degrees.round)
601
+ axis_x.to_f, axis_y.to_f, 0, 0, width.to_i, height.to_i, angle.to_degrees.round.to_i)
592
602
  init_with_image(ptr)
593
603
  end
594
604
 
@@ -601,7 +611,7 @@ module GD2
601
611
  # (0, 0).
602
612
  def crop!(x, y, w, h)
603
613
  ptr = self.class.create_image_ptr(w, h, alpha_blending?)
604
- GD2FFI.send(:gdImageCopy, ptr, image_ptr, 0, 0, x, y, w, h)
614
+ GD2FFI.send(:gdImageCopy, ptr, image_ptr, 0, 0, x.to_i, y.to_i, w.to_i, h.to_i)
605
615
  init_with_image(ptr)
606
616
  end
607
617
 
@@ -615,7 +625,7 @@ module GD2
615
625
  def uncrop!(x1, y1 = x1, x2 = x1, y2 = y1)
616
626
  ptr = self.class.create_image_ptr(x1 + width + x2, y1 + height + y2,
617
627
  alpha_blending?)
618
- GD2FFI.send(:gdImageCopy, ptr, image_ptr, x1, y1, 0, 0, width, height)
628
+ GD2FFI.send(:gdImageCopy, ptr, image_ptr, x1.to_i, y1.to_i, 0, 0, width.to_i, height.to_i)
619
629
  init_with_image(ptr)
620
630
  end
621
631
 
@@ -630,7 +640,7 @@ module GD2
630
640
  def resize!(w, h, resample = true)
631
641
  ptr = self.class.create_image_ptr(w, h, false)
632
642
  GD2FFI.send(resample ? :gdImageCopyResampled : :gdImageCopyResized,
633
- ptr, image_ptr, 0, 0, 0, 0, w, h, width, height)
643
+ ptr, image_ptr, 0, 0, 0, 0, w.to_i, h.to_i, width.to_i, height.to_i)
634
644
  alpha_blending = alpha_blending?
635
645
  init_with_image(ptr)
636
646
  self.alpha_blending = alpha_blending
@@ -648,7 +658,7 @@ module GD2
648
658
  # Note that the original image must be square.
649
659
  def polar_transform!(radius)
650
660
  raise 'Image must be square' unless width == height
651
- ptr = GD2FFI.send(:gdImageSquareToCircle, image_ptr, radius)
661
+ ptr = GD2FFI.send(:gdImageSquareToCircle, image_ptr, radius.to_i)
652
662
  raise LibraryError unless ptr
653
663
  init_with_image(ptr)
654
664
  end
@@ -675,7 +685,7 @@ module GD2
675
685
  # +dither+ controls whether dithering is used.
676
686
  def to_indexed_color(colors = MAX_COLORS, dither = true)
677
687
  ptr = GD2FFI.send(:gdImageCreatePaletteFromTrueColor,
678
- to_true_color.image_ptr, dither ? 1 : 0, colors)
688
+ to_true_color.image_ptr, dither ? 1 : 0, colors.to_i)
679
689
  raise LibraryError unless ptr
680
690
 
681
691
  obj = IndexedColor.allocate.init_with_image(ptr)
@@ -757,7 +767,7 @@ module GD2
757
767
  def merge_from(other, dst_x, dst_y, src_x, src_y, w, h, pct, gray = false)
758
768
  return super(other, dst_x, dst_y, src_x, src_y, w, h, pct) unless gray
759
769
  GD2FFI.send(:gdImageCopyMergeGray, image_ptr, other.image_ptr,
760
- dst_x, dst_y, src_x, src_y, w, h, pct.to_percent.round)
770
+ dst_x.to_i, dst_y.to_i, src_x.to_i, src_y.to_i, w.to_i, h.to_i, pct.to_percent.round.to_i)
761
771
  self
762
772
  end
763
773
  end
@@ -778,7 +788,7 @@ module GD2
778
788
  end
779
789
 
780
790
  def sharpen(pct) #:nodoc:
781
- GD2FFI.send(:gdImageSharpen, image_ptr, pct.to_percent.round)
791
+ GD2FFI.send(:gdImageSharpen, image_ptr, pct.to_percent.round.to_i)
782
792
  self
783
793
  end
784
794
  end
data/lib/gd2/palette.rb CHANGED
@@ -104,7 +104,7 @@ module GD2
104
104
  def resolve(color)
105
105
  raise TypeError unless color.kind_of? Color
106
106
  c = GD2FFI.send(:gdImageColorResolveAlpha, @image.image_ptr,
107
- color.red, color. green, color.blue, color.alpha)
107
+ color.red.to_i, color.green.to_i, color.blue.to_i, color.alpha.to_i)
108
108
  c == -1 ? nil : get_color(c)
109
109
  end
110
110
 
@@ -113,7 +113,7 @@ module GD2
113
113
  def exact(color)
114
114
  raise TypeError unless color.kind_of? Color
115
115
  c = GD2FFI.send(:gdImageColorExactAlpha, @image.image_ptr,
116
- color.red, color.green, color.blue, color.alpha)
116
+ color.red.to_i, color.green.to_i, color.blue.to_i, color.alpha.to_i)
117
117
  c == -1 ? nil : get_color(c)
118
118
  end
119
119
 
@@ -129,7 +129,7 @@ module GD2
129
129
  def closest(color)
130
130
  raise TypeError unless color.kind_of? Color
131
131
  c = GD2FFI.send(:gdImageColorClosestAlpha, @image.image_ptr,
132
- color.red, color.green, color.blue, color.alpha)
132
+ color.red.to_i, color.green.to_i, color.blue.to_i, color.alpha.to_i)
133
133
  c == -1 ? nil : get_color(c)
134
134
  end
135
135
 
@@ -138,7 +138,7 @@ module GD2
138
138
  def closest_hwb(color)
139
139
  raise TypeError unless color.kind_of? Color
140
140
  c = GD2FFI.send(:gdImageColorClosestHWB, @image.image_ptr,
141
- color.red, color.green, color.blue)
141
+ color.red.to_i, color.green.to_i, color.blue.to_i)
142
142
  c == -1 ? nil : get_color(c)
143
143
  end
144
144
 
@@ -148,7 +148,7 @@ module GD2
148
148
  def allocate(color)
149
149
  raise TypeError unless color.kind_of? Color
150
150
  c = GD2FFI.send(:gdImageColorAllocateAlpha, @image.image_ptr,
151
- color.red, color.green, color.blue, color.alpha)
151
+ color.red.to_i, color.green.to_i, color.blue.to_i, color.alpha.to_i)
152
152
  c == -1 ? raise(Palette::PaletteFullError, 'Palette is full') :
153
153
  get_color(c)
154
154
  end
@@ -164,7 +164,7 @@ module GD2
164
164
  def deallocate(color)
165
165
  color = exact(color) unless color.index
166
166
  return nil if color.nil? || color.index.nil?
167
- GD2FFI.send(:gdImageColorDeallocate, @image.image_ptr, color.index)
167
+ GD2FFI.send(:gdImageColorDeallocate, @image.image_ptr, color.index.to_i)
168
168
  nil
169
169
  end
170
170
 
data/test/canvas_test.rb CHANGED
@@ -4,183 +4,183 @@ require 'tmpdir'
4
4
  require 'rubygems'
5
5
  require 'gd2-ffij'
6
6
 
7
- require 'test/test_helper'
7
+ require './test/test_helper'
8
8
 
9
9
  class CanvasTest < Test::Unit::TestCase
10
- include TestHelper
11
-
12
- def test_line
13
- image = new_image
14
- image.draw do |pen|
15
- pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
16
- pen.line(64, 64, 192, 192)
17
- end
18
- assert(image == load_image('test_canvas_line.gd2'))
19
- end
20
-
21
- def test_rectangle
22
- image = new_image
23
- image.draw do |pen|
24
- pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
25
- pen.rectangle(64, 64, 192, 192)
26
- end
27
- assert(image == load_image('test_canvas_rectangle.gd2'))
28
- end
29
-
30
- def test_filled_rectangle
31
- image = new_image
32
- image.draw do |pen|
33
- pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
34
- pen.rectangle(64, 64, 192, 192, true)
35
- end
36
- assert(image == load_image('test_canvas_filled_rectangle.gd2'))
37
- end
38
-
39
- def test_polygon
40
- image = new_image
41
- image.draw do |pen|
42
- pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
43
- pen.polygon([
44
- [ 64, 64 ],
45
- [ 192, 192 ],
46
- [ 64, 128 ]
47
- ])
48
- end
49
- assert(image == load_image('test_canvas_polygon.gd2'))
50
- end
51
-
52
- def test_filled_polygon
53
- image = new_image
54
- image.draw do |pen|
55
- pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
56
- pen.polygon([
57
- [ 64, 64 ],
58
- [ 192, 192 ],
59
- [ 64, 128 ]
60
- ], true)
61
- end
62
- assert(image == load_image('test_canvas_filled_polygon.gd2'))
63
- end
64
-
65
- def test_move_to_and_line_to
66
- image = new_image
67
- image.draw do |pen|
68
- pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
69
- pen.move_to(64, 64)
70
- pen.line_to(128, 128)
71
- end
72
- assert(image == load_image('test_canvas_move_to_and_line_to.gd2'))
73
- end
74
-
75
- def test_fill
76
- image = new_image
77
- image.draw do |pen|
78
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
79
- pen.rectangle(64, 64, 192, 192)
80
- pen.move_to(65, 65)
81
- pen.fill
82
- end
83
- assert(image == load_image('test_fill.gd2'))
84
- end
85
-
86
- def test_arc
87
- image = new_image
88
- image.draw do |pen|
89
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
90
- pen.arc(128, 128, 128, 128, 0..256)
91
- end
92
- assert(image == load_image('test_arc.gd2'))
93
- end
94
-
95
- def test_text
96
- image = new_image
97
- image.draw do |pen|
98
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
99
- pen.font = GD2::Font::TrueType[PATH_TO_FONT, 32]
100
- pen.move_to(0, 128)
101
- pen.text("HELLO")
102
- pen.move_to(256, 128)
103
- pen.text("WORLD", Math::PI)
104
- end
105
- assert(image == load_image('test_text.gd2'))
106
- end
107
-
108
- def test_text_circle
109
- image = new_image
110
- image.draw do |pen|
111
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
112
- pen.font = GD2::Font::TrueType[PATH_TO_FONT, 32]
113
- pen.move_to(128, 128)
114
- pen.text_circle('HELLO', 'WORLD', 100, 20, 1)
115
- end
116
- assert(image == load_image('test_text_circle.gd2'))
117
- end
118
-
119
- def test_wedge
120
- image = new_image
121
- image.draw do |pen|
122
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
123
- pen.wedge(128, 128, 256, 256, 0..180)
124
- end
125
- assert(image == load_image('test_wedge.gd2'))
126
- end
127
-
128
- def test_filled_wedge
129
- image = new_image
130
- image.draw do |pen|
131
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
132
- pen.wedge(128, 128, 256, 256, 0..180, true)
133
- end
134
- assert(image == load_image('test_filled_wedge.gd2'))
135
- end
136
-
137
- def test_ellipse
138
- image = new_image
139
- image.draw do |pen|
140
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
141
- pen.ellipse(128, 128, 64, 32)
142
- end
143
- assert(image == load_image('test_ellipse.gd2'))
144
- end
145
-
146
- def test_filled_ellipse
147
- image = new_image
148
- image.draw do |pen|
149
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
150
- pen.ellipse(128, 128, 64, 32, true)
151
- end
152
- assert(image == load_image('test_filled_ellipse.gd2'))
153
- end
154
-
155
- def test_circle
156
- image = new_image
157
- image.draw do |pen|
158
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
159
- pen.circle(128, 128, 128)
160
- end
161
- assert(image == load_image('test_circle.gd2'))
162
- end
163
-
164
- def test_filled_circle
165
- image = new_image
166
- image.draw do |pen|
167
- pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
168
- pen.circle(128, 128, 128, true)
169
- end
170
- assert(image == load_image('test_filled_circle.gd2'))
171
- end
172
-
173
- def test_fill_to
174
- image = new_image
175
- image.draw do |pen|
176
- blue = image.palette.resolve(GD2::Color[32, 64, 128])
177
- red = image.palette.resolve(GD2::Color[255, 0, 0])
178
- pen.color = blue
179
- pen.arc(128, 128, 256, 64, 0..(Math::PI))
180
- pen.color = red
181
- pen.move(128, 128)
182
- pen.fill_to(blue)
183
- end
184
- assert(image == load_image('test_fill_to.gd2'))
185
- end
10
+ include TestHelper
11
+
12
+ def test_line
13
+ image = new_image
14
+ image.draw do |pen|
15
+ pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
16
+ pen.line(64, 64, 192, 192)
17
+ end
18
+ assert(image == load_image('test_canvas_line.gd2'))
19
+ end
20
+
21
+ def test_rectangle
22
+ image = new_image
23
+ image.draw do |pen|
24
+ pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
25
+ pen.rectangle(64, 64, 192, 192)
26
+ end
27
+ assert(image == load_image('test_canvas_rectangle.gd2'))
28
+ end
29
+
30
+ def test_filled_rectangle
31
+ image = new_image
32
+ image.draw do |pen|
33
+ pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
34
+ pen.rectangle(64, 64, 192, 192, true)
35
+ end
36
+ assert(image == load_image('test_canvas_filled_rectangle.gd2'))
37
+ end
38
+
39
+ def test_polygon
40
+ image = new_image
41
+ image.draw do |pen|
42
+ pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
43
+ pen.polygon([
44
+ [ 64, 64 ],
45
+ [ 192, 192 ],
46
+ [ 64, 128 ]
47
+ ])
48
+ end
49
+ assert(image == load_image('test_canvas_polygon.gd2'))
50
+ end
51
+
52
+ def test_filled_polygon
53
+ image = new_image
54
+ image.draw do |pen|
55
+ pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
56
+ pen.polygon([
57
+ [ 64, 64 ],
58
+ [ 192, 192 ],
59
+ [ 64, 128 ]
60
+ ], true)
61
+ end
62
+ assert(image == load_image('test_canvas_filled_polygon.gd2'))
63
+ end
64
+
65
+ def test_move_to_and_line_to
66
+ image = new_image
67
+ image.draw do |pen|
68
+ pen.color = image.palette.resolve(GD2::Color[255, 255, 255])
69
+ pen.move_to(64, 64)
70
+ pen.line_to(128, 128)
71
+ end
72
+ assert(image == load_image('test_canvas_move_to_and_line_to.gd2'))
73
+ end
74
+
75
+ def test_fill
76
+ image = new_image
77
+ image.draw do |pen|
78
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
79
+ pen.rectangle(64, 64, 192, 192)
80
+ pen.move_to(65, 65)
81
+ pen.fill
82
+ end
83
+ assert(image == load_image('test_fill.gd2'))
84
+ end
85
+
86
+ def test_arc
87
+ image = new_image
88
+ image.draw do |pen|
89
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
90
+ pen.arc(128, 128, 128, 128, 0..256)
91
+ end
92
+ assert(image == load_image('test_arc.gd2'))
93
+ end
94
+
95
+ def test_text
96
+ image = new_image
97
+ image.draw do |pen|
98
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
99
+ pen.font = GD2::Font::TrueType[PATH_TO_FONT, 32]
100
+ pen.move_to(0, 128)
101
+ pen.text("HELLO")
102
+ pen.move_to(256, 128)
103
+ pen.text("WORLD", Math::PI)
104
+ end
105
+ assert(image == load_image('test_text.gd2'))
106
+ end
107
+
108
+ def test_text_circle
109
+ image = new_image
110
+ image.draw do |pen|
111
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
112
+ pen.font = GD2::Font::TrueType[PATH_TO_FONT, 32]
113
+ pen.move_to(128, 128)
114
+ pen.text_circle('HELLO', 'WORLD', 100, 20, 1)
115
+ end
116
+ assert(image == load_image('test_text_circle.gd2'))
117
+ end
118
+
119
+ def test_wedge
120
+ image = new_image
121
+ image.draw do |pen|
122
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
123
+ pen.wedge(128, 128, 256, 256, 0..180)
124
+ end
125
+ assert(image == load_image('test_wedge.gd2'))
126
+ end
127
+
128
+ def test_filled_wedge
129
+ image = new_image
130
+ image.draw do |pen|
131
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
132
+ pen.wedge(128, 128, 256, 256, 0..180, true)
133
+ end
134
+ assert(image == load_image('test_filled_wedge.gd2'))
135
+ end
136
+
137
+ def test_ellipse
138
+ image = new_image
139
+ image.draw do |pen|
140
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
141
+ pen.ellipse(128, 128, 64, 32)
142
+ end
143
+ assert(image == load_image('test_ellipse.gd2'))
144
+ end
145
+
146
+ def test_filled_ellipse
147
+ image = new_image
148
+ image.draw do |pen|
149
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
150
+ pen.ellipse(128, 128, 64, 32, true)
151
+ end
152
+ assert(image == load_image('test_filled_ellipse.gd2'))
153
+ end
154
+
155
+ def test_circle
156
+ image = new_image
157
+ image.draw do |pen|
158
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
159
+ pen.circle(128, 128, 128)
160
+ end
161
+ assert(image == load_image('test_circle.gd2'))
162
+ end
163
+
164
+ def test_filled_circle
165
+ image = new_image
166
+ image.draw do |pen|
167
+ pen.color = image.palette.resolve(GD2::Color[32, 64, 128])
168
+ pen.circle(128, 128, 128, true)
169
+ end
170
+ assert(image == load_image('test_filled_circle.gd2'))
171
+ end
172
+
173
+ def test_fill_to
174
+ image = new_image
175
+ image.draw do |pen|
176
+ blue = image.palette.resolve(GD2::Color[32, 64, 128])
177
+ red = image.palette.resolve(GD2::Color[255, 0, 0])
178
+ pen.color = blue
179
+ pen.arc(128, 128, 256, 64, 0..(Math::PI))
180
+ pen.color = red
181
+ pen.move(128, 128)
182
+ pen.fill_to(blue)
183
+ end
184
+ assert(image == load_image('test_fill_to.gd2'))
185
+ end
186
186
  end
data/test/image_test.rb CHANGED
@@ -4,146 +4,146 @@ require 'tmpdir'
4
4
  require 'rubygems'
5
5
  require 'gd2-ffij'
6
6
 
7
- require 'test/test_helper'
7
+ require './test/test_helper'
8
8
 
9
9
  class ImageTest < Test::Unit::TestCase
10
- include TestHelper
11
-
12
- def test_image_new_and_release
13
- img = GD2::Image.new(50, 50)
14
- end
15
-
16
- def test_image_true_color_new_and_release
17
- img = GD2::Image::TrueColor.new(50, 50)
18
- end
19
-
20
- def test_image_indexed_color_new_and_release
21
- img = GD2::Image::IndexedColor.new(50, 50)
22
- end
23
-
24
- [ :png, :gif, :jpg, :wbmp, :gd2 ].each do |ext|
25
- self.class_eval(<<-EOF)
26
- def test_load_#{ext}_from_file
27
- img = GD2::Image.load(File.open(File.join(PATH_TO_IMAGES, 'test.#{ext}')))
28
- end
29
-
30
- def test_load_#{ext}_from_string
31
- img = GD2::Image.load(File.read(File.join(PATH_TO_IMAGES, 'test.#{ext}')))
32
- end
33
- EOF
34
- end
35
-
36
- # TODO: add xbm, xpm and wbmp tests
37
- [ :png, :gif, :jpg, :gd, :gd2 ].each do |ext|
38
- self.class_eval(<<-EOF)
39
- def test_import_#{ext}_from_file
40
- img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
41
- end
42
-
43
- def test_export_#{ext}
44
- img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2'))
45
- out = File.join(Dir.tmpdir, 'test.#{ext}')
46
- img.export(out)
47
-
48
- assert(File.exists?(out))
49
-
50
- imgA = GD2::Image.import(out)
51
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
52
-
53
- assert(imgA == imgB)
54
-
55
- File.unlink(out)
56
- end
57
-
58
- def test_compare_#{ext}
59
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
60
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
61
- assert_equal(imgA.compare(imgB), 0)
62
- assert_equal(imgA.compare(imgA.dup), 0)
63
- end
64
-
65
- def test_eqeq_#{ext}
66
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
67
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
68
- assert(imgA == imgB)
69
- assert(imgA == imgA.dup)
70
- end
71
-
72
- def test_height_#{ext}
73
- img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
74
- assert_equal(img.height, 256)
75
- end
76
-
77
- def test_width_#{ext}
78
- img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
79
- assert_equal(img.width, 256)
80
- end
81
-
82
- def test_size_#{ext}
83
- img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
84
- assert_equal(img.size, [ 256, 256 ])
85
- end
86
-
87
- def test_aspect_#{ext}
88
- img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
89
- assert_in_delta(img.aspect, 1.0, 0.00000001)
90
- end
91
- EOF
92
- end
93
-
94
- def test_rotate
95
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).rotate!(Math::PI)
96
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_rotated_180.gd2'))
97
-
98
- assert(imgA == imgB)
99
- end
100
-
101
- def test_crop
102
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).crop!(64, 64, 128, 128)
103
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_cropped.gd2'))
104
-
105
- assert(imgA == imgB)
106
- end
107
-
108
- def test_uncrop
109
- img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).crop!(64, 64, 128, 128)
110
- img.uncrop!(64)
111
-
112
- assert_equal(img.size, [ 256, 256 ])
113
- end
114
-
115
- def test_resize
116
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).resize!(512, 512)
117
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_resized.gd2'))
118
-
119
- assert(imgA == imgB)
120
- end
121
-
122
- def test_resampled
123
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).resize!(512, 512, true)
124
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_resampled.gd2'))
125
-
126
- assert(imgA == imgB)
127
- end
128
-
129
- def test_polar_transform
130
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).polar_transform!(100)
131
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_polar_transform.gd2'))
132
-
133
- assert(imgA == imgB)
134
- end
10
+ include TestHelper
11
+
12
+ def test_image_new_and_release
13
+ img = GD2::Image.new(50, 50)
14
+ end
15
+
16
+ def test_image_true_color_new_and_release
17
+ img = GD2::Image::TrueColor.new(50, 50)
18
+ end
19
+
20
+ def test_image_indexed_color_new_and_release
21
+ img = GD2::Image::IndexedColor.new(50, 50)
22
+ end
23
+
24
+ [ :png, :gif, :jpg, :wbmp, :gd2 ].each do |ext|
25
+ self.class_eval(<<-EOF)
26
+ def test_load_#{ext}_from_file
27
+ img = GD2::Image.load(File.open(File.join(PATH_TO_IMAGES, 'test.#{ext}')))
28
+ end
29
+
30
+ def test_load_#{ext}_from_string
31
+ img = GD2::Image.load(File.read(File.join(PATH_TO_IMAGES, 'test.#{ext}')))
32
+ end
33
+ EOF
34
+ end
35
+
36
+ # TODO: add xbm, xpm and wbmp tests
37
+ [ :png, :gif, :jpg, :gd, :gd2 ].each do |ext|
38
+ self.class_eval(<<-EOF)
39
+ def test_import_#{ext}_from_file
40
+ img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
41
+ end
42
+
43
+ def test_export_#{ext}
44
+ img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2'))
45
+ out = File.join(Dir.tmpdir, 'test.#{ext}')
46
+ img.export(out)
47
+
48
+ assert(File.exists?(out))
49
+
50
+ imgA = GD2::Image.import(out)
51
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
52
+
53
+ assert(imgA == imgB)
54
+
55
+ File.unlink(out)
56
+ end
57
+
58
+ def test_compare_#{ext}
59
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
60
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
61
+ assert_equal(imgA.compare(imgB), 0)
62
+ assert_equal(imgA.compare(imgA.dup), 0)
63
+ end
64
+
65
+ def test_eqeq_#{ext}
66
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
67
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
68
+ assert(imgA == imgB)
69
+ assert(imgA == imgA.dup)
70
+ end
71
+
72
+ def test_height_#{ext}
73
+ img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
74
+ assert_equal(img.height, 256)
75
+ end
76
+
77
+ def test_width_#{ext}
78
+ img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
79
+ assert_equal(img.width, 256)
80
+ end
81
+
82
+ def test_size_#{ext}
83
+ img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
84
+ assert_equal(img.size, [ 256, 256 ])
85
+ end
86
+
87
+ def test_aspect_#{ext}
88
+ img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.#{ext}'))
89
+ assert_in_delta(img.aspect, 1.0, 0.00000001)
90
+ end
91
+ EOF
92
+ end
93
+
94
+ def test_rotate
95
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).rotate!(Math::PI)
96
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_rotated_180.gd2'))
97
+
98
+ assert(imgA == imgB)
99
+ end
100
+
101
+ def test_crop
102
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).crop!(64, 64, 128, 128)
103
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_cropped.gd2'))
104
+
105
+ assert(imgA == imgB)
106
+ end
107
+
108
+ def test_uncrop
109
+ img = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).crop!(64, 64, 128, 128)
110
+ img.uncrop!(64)
111
+
112
+ assert_equal(img.size, [ 256, 256 ])
113
+ end
114
+
115
+ def test_resize
116
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).resize!(512, 512)
117
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_resized.gd2'))
118
+
119
+ assert(imgA == imgB)
120
+ end
121
+
122
+ def test_resampled
123
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).resize!(512, 512, true)
124
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_resampled.gd2'))
125
+
126
+ assert(imgA == imgB)
127
+ end
128
+
129
+ def test_polar_transform
130
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test.gd2')).polar_transform!(100)
131
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_polar_transform.gd2'))
132
+
133
+ assert(imgA == imgB)
134
+ end
135
135
 
136
- def test_color_sharpened
137
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color.gd2')).sharpen(100)
138
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color_sharpened.gd2'))
136
+ def test_color_sharpened
137
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color.gd2')).sharpen(100)
138
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color_sharpened.gd2'))
139
139
 
140
- assert(imgA == imgB)
141
- end
140
+ assert(imgA == imgB)
141
+ end
142
142
 
143
- def test_resampled
144
- imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color.gd2')).to_indexed_color
145
- imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color_indexed.gd2'))
143
+ def test_resampled
144
+ imgA = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color.gd2')).to_indexed_color
145
+ imgB = GD2::Image.import(File.join(PATH_TO_IMAGES, 'test_color_indexed.gd2'))
146
146
 
147
- assert(imgA == imgB)
148
- end
147
+ assert(imgA == imgB)
148
+ end
149
149
  end
data/test/test_helper.rb CHANGED
@@ -1,13 +1,13 @@
1
1
 
2
2
  module TestHelper
3
- PATH_TO_IMAGES = File.join(File.dirname(__FILE__), 'images')
4
- PATH_TO_FONT = File.join(File.dirname(__FILE__), '..', 'vendor', 'fonts', 'ttf', 'DejaVuSans.ttf')
3
+ PATH_TO_IMAGES = File.join(File.dirname(__FILE__), 'images')
4
+ PATH_TO_FONT = File.join(File.dirname(__FILE__), '..', 'vendor', 'fonts', 'ttf', 'DejaVuSans.ttf')
5
5
 
6
6
  def new_image
7
- GD2::Image.new(256, 256)
7
+ GD2::Image.new(256, 256)
8
8
  end
9
9
 
10
10
  def load_image(file_name)
11
- GD2::Image.load(File.read(File.join(PATH_TO_IMAGES, file_name)))
11
+ GD2::Image.load(File.read(File.join(PATH_TO_IMAGES, file_name)))
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gd2-ffij
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 25
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 2
9
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - J Smith
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-03-13 00:00:00 -05:00
18
+ date: 2010-11-11 00:00:00 -05:00
18
19
  default_executable:
19
20
  dependencies: []
20
21
 
@@ -92,23 +93,27 @@ rdoc_options:
92
93
  require_paths:
93
94
  - lib
94
95
  required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
95
97
  requirements:
96
98
  - - ">="
97
99
  - !ruby/object:Gem::Version
100
+ hash: 3
98
101
  segments:
99
102
  - 0
100
103
  version: "0"
101
104
  required_rubygems_version: !ruby/object:Gem::Requirement
105
+ none: false
102
106
  requirements:
103
107
  - - ">="
104
108
  - !ruby/object:Gem::Version
109
+ hash: 3
105
110
  segments:
106
111
  - 0
107
112
  version: "0"
108
113
  requirements: []
109
114
 
110
115
  rubyforge_project:
111
- rubygems_version: 1.3.6
116
+ rubygems_version: 1.3.7
112
117
  signing_key:
113
118
  specification_version: 3
114
119
  summary: gd2-ffij is a refactoring of the Ruby/GD2 library implemented with FFI