cyross-ruby-miyako-mswin32 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. data/README +929 -0
  2. data/img/cursor.png +0 -0
  3. data/img/cursors.png +0 -0
  4. data/img/dice.png +0 -0
  5. data/img/wait_cursor.png +0 -0
  6. data/img/win_base.png +0 -0
  7. data/img/window.png +0 -0
  8. data/install_miyako.rb +61 -0
  9. data/lib/Miyako/API/audio.rb +198 -0
  10. data/lib/Miyako/API/basic_data.rb +573 -0
  11. data/lib/Miyako/API/bitmap.rb +507 -0
  12. data/lib/Miyako/API/choices.rb +475 -0
  13. data/lib/Miyako/API/collision.rb +460 -0
  14. data/lib/Miyako/API/diagram.rb +561 -0
  15. data/lib/Miyako/API/drawing.rb +151 -0
  16. data/lib/Miyako/API/fixedmap.rb +428 -0
  17. data/lib/Miyako/API/font.rb +403 -0
  18. data/lib/Miyako/API/input.rb +447 -0
  19. data/lib/Miyako/API/layout.rb +433 -0
  20. data/lib/Miyako/API/map.rb +529 -0
  21. data/lib/Miyako/API/map_event.rb +198 -0
  22. data/lib/Miyako/API/modules.rb +109 -0
  23. data/lib/Miyako/API/movie.rb +154 -0
  24. data/lib/Miyako/API/parts.rb +189 -0
  25. data/lib/Miyako/API/plane.rb +166 -0
  26. data/lib/Miyako/API/screen.rb +325 -0
  27. data/lib/Miyako/API/shape.rb +443 -0
  28. data/lib/Miyako/API/sprite.rb +752 -0
  29. data/lib/Miyako/API/sprite_animation.rb +481 -0
  30. data/lib/Miyako/API/spriteunit.rb +147 -0
  31. data/lib/Miyako/API/story.rb +300 -0
  32. data/lib/Miyako/API/textbox.rb +725 -0
  33. data/lib/Miyako/API/utility.rb +388 -0
  34. data/lib/Miyako/API/viewport.rb +140 -0
  35. data/lib/Miyako/API/yuki.rb +996 -0
  36. data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
  37. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  38. data/lib/Miyako/EXT/slides.rb +157 -0
  39. data/lib/Miyako/miyako.rb +171 -0
  40. data/lib/Miyako/miyako_no_katana.so +0 -0
  41. data/logo/EGSR_logo.png +0 -0
  42. data/logo/EGSR_logo_bg.png +0 -0
  43. data/logo/EGSR_logo_fg.png +0 -0
  44. data/logo/EGSR_title_banner.png +0 -0
  45. data/logo/EGSR_title_logo.png +0 -0
  46. data/logo/miyako.png +0 -0
  47. data/logo/miyako_banner.png +0 -0
  48. data/logo/space.png +0 -0
  49. data/sample/Animation1/m1ku.rb +68 -0
  50. data/sample/Animation1/m1ku_arm_0.png +0 -0
  51. data/sample/Animation1/m1ku_arm_1.png +0 -0
  52. data/sample/Animation1/m1ku_arm_2.png +0 -0
  53. data/sample/Animation1/m1ku_arm_3.png +0 -0
  54. data/sample/Animation1/m1ku_back.jpg +0 -0
  55. data/sample/Animation1/m1ku_body.png +0 -0
  56. data/sample/Animation1/m1ku_eye_0.png +0 -0
  57. data/sample/Animation1/m1ku_eye_1.png +0 -0
  58. data/sample/Animation1/m1ku_eye_2.png +0 -0
  59. data/sample/Animation1/m1ku_eye_3.png +0 -0
  60. data/sample/Animation1/m1ku_hair_front.png +0 -0
  61. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  62. data/sample/Animation1/readme.txt +72 -0
  63. data/sample/Animation2/lex.rb +96 -0
  64. data/sample/Animation2/lex_back.png +0 -0
  65. data/sample/Animation2/lex_body.png +0 -0
  66. data/sample/Animation2/lex_roadroller.png +0 -0
  67. data/sample/Animation2/lex_wheel_0.png +0 -0
  68. data/sample/Animation2/lex_wheel_1.png +0 -0
  69. data/sample/Animation2/lex_wheel_2.png +0 -0
  70. data/sample/Animation2/readme.txt +72 -0
  71. data/sample/Animation2/song_title.png +0 -0
  72. data/sample/Diagram_sample/back.png +0 -0
  73. data/sample/Diagram_sample/chr01.png +0 -0
  74. data/sample/Diagram_sample/chr02.png +0 -0
  75. data/sample/Diagram_sample/cursor.png +0 -0
  76. data/sample/Diagram_sample/diagram_sample_yuki2.rb +387 -0
  77. data/sample/Diagram_sample/readme.txt +90 -0
  78. data/sample/Diagram_sample/wait_cursor.png +0 -0
  79. data/sample/Room3/blue.rb +297 -0
  80. data/sample/Room3/ending.rb +180 -0
  81. data/sample/Room3/green.rb +220 -0
  82. data/sample/Room3/image/akamatsu.png +0 -0
  83. data/sample/Room3/image/aoyama.png +0 -0
  84. data/sample/Room3/image/congra.png +0 -0
  85. data/sample/Room3/image/congratulation.png +0 -0
  86. data/sample/Room3/image/congratulation_bg.png +0 -0
  87. data/sample/Room3/image/cursor.png +0 -0
  88. data/sample/Room3/image/midori.png +0 -0
  89. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  90. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  91. data/sample/Room3/image/room_blue.png +0 -0
  92. data/sample/Room3/image/room_green.png +0 -0
  93. data/sample/Room3/image/room_red.png +0 -0
  94. data/sample/Room3/image/start.png +0 -0
  95. data/sample/Room3/image/three_doors.png +0 -0
  96. data/sample/Room3/image/wait_cursor.png +0 -0
  97. data/sample/Room3/main.rb +120 -0
  98. data/sample/Room3/main_component.rb +59 -0
  99. data/sample/Room3/readme.txt +76 -0
  100. data/sample/Room3/red.rb +227 -0
  101. data/sample/Room3/room3.rb +27 -0
  102. data/sample/Room3/title.rb +184 -0
  103. data/sample/ball_action_sample.rb +204 -0
  104. data/sample/blit_rop.rb +70 -0
  105. data/sample/cairo_sample.rb +25 -0
  106. data/sample/circle_collision_test.rb +62 -0
  107. data/sample/collision_test.rb +33 -0
  108. data/sample/collision_test2.rb +104 -0
  109. data/sample/fixed_map_test/cursor.png +0 -0
  110. data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
  111. data/sample/fixed_map_test/map.csv +19 -0
  112. data/sample/fixed_map_test/map_01.png +0 -0
  113. data/sample/fixed_map_test/mapchip.csv +23 -0
  114. data/sample/fixed_map_test/monster.png +0 -0
  115. data/sample/fixed_map_test/readme.txt +72 -0
  116. data/sample/map_test/chara.rb +58 -0
  117. data/sample/map_test/chr1.png +0 -0
  118. data/sample/map_test/cursor.png +0 -0
  119. data/sample/map_test/main_parts.rb +69 -0
  120. data/sample/map_test/main_scene.rb +153 -0
  121. data/sample/map_test/map.png +0 -0
  122. data/sample/map_test/map2.png +0 -0
  123. data/sample/map_test/map_layer.csv +127 -0
  124. data/sample/map_test/map_manager.rb +75 -0
  125. data/sample/map_test/map_test.rb +23 -0
  126. data/sample/map_test/mapchip.csv +21 -0
  127. data/sample/map_test/oasis.rb +71 -0
  128. data/sample/map_test/readme.txt +89 -0
  129. data/sample/map_test/route.rb +157 -0
  130. data/sample/map_test/sea.png +0 -0
  131. data/sample/map_test/town.rb +74 -0
  132. data/sample/map_test/wait_cursor.png +0 -0
  133. data/sample/map_test/window.png +0 -0
  134. data/sample/polygon_test.rb +35 -0
  135. data/sample/rasterscroll.rb +25 -0
  136. data/sample/takahashi.rb +42 -0
  137. data/sample/text.png +0 -0
  138. data/sample/textbox_sample.rb +190 -0
  139. data/sample/transform.rb +54 -0
  140. data/sample/utility_test.rb +73 -0
  141. data/sample/utility_test2.rb +61 -0
  142. data/sample/utility_test3.rb +64 -0
  143. data/sample/utility_test4.rb +73 -0
  144. data/uninstall_miyako.rb +19 -0
  145. metadata +196 -0
@@ -0,0 +1,443 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ @@modes = [:text, :txt_calc, :takahashi, :tk_calc]
25
+
26
+ #==テキストや図形を描画するクラス
27
+ #図形は、長方形・丸み付き長方形・円・楕円が描画可能
28
+ #文字列は、通常の文字列と高橋メソッド形式文字列が描画可能
29
+ class Shape
30
+ def init_parameter(parameter)
31
+ @text = parameter[:text]
32
+ @size = parameter[:size] ||= Size.new(100,100)
33
+ @color = parameter[:color] ||= Color[:white]
34
+ @font = parameter[:font] ||= Font.sans_serif
35
+ @ray = parameter[:ray] ||= 0
36
+ @edge = parameter[:edge] ||= nil
37
+ @align = parameter[:align] ||= :left
38
+ @valign = parameter[:valign] ||= :middle
39
+ @lines = parameter[:lines] ||= 2
40
+ @vertexes = parameter[:vertexes] ||= []
41
+ end
42
+
43
+ @@shape_executer = Shape.new
44
+
45
+ #===テキストを描画した画像を作成
46
+ #_param_:: 設定パラメータ。ハッシュ形式。
47
+ #(:font => 描画するフォントのインスタンス(デフォルトはFont.sans_serif),
48
+ #(:align => 複数行描画するときの文字列のアライン(:left,:center,:rightの三種。デフォルトは:left))
49
+ #(:valign => 行中の小さい文字を描画するときの縦の位置(:top,:middle,:bottomの三種。デフォルトは:middle))
50
+ #_&block_:: 描画するテキスト(Yuki形式)
51
+ #返却値:: テキストを描画したスプライト
52
+ def Shape.text(param, &block)
53
+ raise MiyakoError, "Cannot find any text(:text parameter)!" unless (param[:text] || block)
54
+ @@shape_executer.create_text(param, block)
55
+ end
56
+
57
+ #===テキストを高橋メソッド形式で描画した画像を作成
58
+ #指定した大きさの矩形・行数で文字を描画する。
59
+ #指定した行数で描画を基準に文字サイズを算出する。
60
+ #但し、文字列が長すぎる時は、その文字数を基準に文字サイズを算出する。
61
+ #ブロックに渡した行数が指定数より多くなると文字列がはみ出るため、注意すること。
62
+ #_param_:: 設定パラメータ。ハッシュ形式。
63
+ #(:font => 描画するフォントのインスタンス(デフォルトはFont.sans_serif),
64
+ #(:align => 複数行描画するときの文字列のアライン(:left,:center,:rightの三種。デフォルトは:left),
65
+ #(:size => 描画するサイズ(ピクセル単位、Size構造体のインスタンス、デフォルトは[100,100]))
66
+ #(:valign => 行中の小さい文字を描画するときの縦の位置(:top,:middle,:bottomの三種。デフォルトは:middle))
67
+ #(:lines => 描画する行数(デフォルトは2))
68
+ #_&block_:: 描画するテキスト(Yuki形式)
69
+ #返却値:: テキストを描画したスプライト
70
+ def Shape.takahashi(param, &block)
71
+ @@shape_executer.takahashi(param, block)
72
+ end
73
+
74
+ #===長方形を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
75
+ #_param_:: 設定パラメータ。ハッシュ形式。
76
+ #(:size => 描画するサイズ(ピクセル単位、Size構造体のインスタンス、デフォルトは[100,100]),
77
+ #:color => 長方形の色[r,g,b(,a)]、デフォルトはColor[:white],
78
+ #:edge] => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
79
+ #返却値:: 描画したスプライト
80
+ def Shape.box(param)
81
+ @@shape_executer.box(param)
82
+ end
83
+
84
+ #===丸み付き長方形を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
85
+ #_param_:: 設定パラメータ。ハッシュ形式。
86
+ #(:size => 描画するサイズ(ピクセル単位、Size構造体のインスタンス、デフォルトは[100,100]),
87
+ #:ray => 丸みの半径の大きさ(ピクセル単位。デフォルトは0),
88
+ #:color => 長方形の色[r,g,b(,a)]、デフォルトはColor[:white],
89
+ #:edge => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
90
+ #返却値:: 描画したスプライト
91
+ def Shape.roundbox(param)
92
+ @@shape_executer.roundbox(param)
93
+ end
94
+
95
+ #===円を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
96
+ #_param_:: 設定パラメータ。ハッシュ形式。
97
+ #(:ray => 円の半径の大きさ(ピクセル単位。デフォルトは0),
98
+ #:color => 円の色[r,g,b(,a)]、デフォルトはColor[:white],
99
+ #:edge => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
100
+ #返却値:: 描画したスプライト
101
+ def Shape.circle(param)
102
+ @@shape_executer.circle(param)
103
+ end
104
+
105
+ #===楕円を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
106
+ #_param_:: 設定パラメータ。ハッシュ形式。
107
+ #(:size => 楕円の半径の横・縦の大きさ(ピクセル単位。デフォルトは0),
108
+ #:color => 円の色[r,g,b(,a)]、デフォルトはColor[:white],
109
+ #:edge => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
110
+ #返却値:: 描画したスプライト
111
+ def Shape.ellipse(param)
112
+ @@shape_executer.ellipse(param)
113
+ end
114
+
115
+ #===多角形を描画する
116
+ #_param_:: 設定パラメータ。ハッシュ形式。
117
+ #:vertexes => 頂点リスト。[x,y]形式の配列の配列,
118
+ #:color => 円の色[r,g,b(,a)]、デフォルトはColor[:white],
119
+ #返却値:: 描画したスプライト
120
+ def Shape.polygon(param)
121
+ @@shape_executer.polygon(param)
122
+ end
123
+
124
+ def create_text(param, text_block) #:nodoc:
125
+ init_parameter(param)
126
+ text_block = lambda{ @text } if @text
127
+ org_size = @font.size
128
+ org_color = @font.color
129
+ @margins = []
130
+ @heights = []
131
+ area_size = calc(text_block)
132
+ @sprite = Sprite.new({size: area_size, type: :ac})
133
+ Drawing.fill(@sprite, [0, 0, 0])
134
+ Bitmap.ck_to_ac!(@sprite, [0, 0, 0])
135
+ case @align
136
+ when :left
137
+ @margins = @margins.map{|v| 0 }
138
+ when :center
139
+ @margins = @margins.map{|v| (area_size.w - v) >> 1 }
140
+ when :right
141
+ @margins = @margins.map{|v| area_size.w - v }
142
+ end
143
+ @lines = @margins.length
144
+ vmargin = 0
145
+ case @valign
146
+ when :top
147
+ vmargin = 0
148
+ when :middle
149
+ vmargin = (area_size.h - @heights.inject(:+)) >> 1
150
+ when :bottom
151
+ vmargin = area_size.h - @heights.inject(:+)
152
+ end
153
+ @locate = Point.new(@margins.shift, vmargin)
154
+ text instance_eval(&text_block)
155
+ @font.size = org_size
156
+ @font.color = org_color
157
+ return @sprite
158
+ end
159
+
160
+ def takahashi(param, text_block) #:nodoc:
161
+ init_parameter(param)
162
+ org_size = @font.size
163
+ org_color = @font.color
164
+ olines = @lines
165
+ # calc font size
166
+ @font.size = @size[1] / @lines
167
+ # calc font size incldue line_height
168
+ @font.size = @font.size * @font.size / @font.line_height
169
+ set_font_size_inner(text_block)
170
+ # over lines?
171
+ if @lines > olines
172
+ @font.size = @size[1] / @lines
173
+ @font.size = @font.size * @font.size / @font.line_height
174
+ set_font_size_inner(text_block)
175
+ end
176
+ # over width?
177
+ if @img_size.w > @size[0]
178
+ @font.size = @font.size * @size[0] / @img_size.w
179
+ set_font_size_inner(text_block)
180
+ end
181
+ case @align
182
+ when :left
183
+ @margins = @margins.map{|v| 0 }
184
+ when :center
185
+ @margins = @margins.map{|v| (@size[0] - v) / 2 }
186
+ when :right
187
+ @margins = @margins.map{|v| @size[0] - v }
188
+ end
189
+ vmargin = 0
190
+ case @valign
191
+ when :top
192
+ vmargin = 0
193
+ when :middle
194
+ vmargin = (@size[1] - @heights.inject(:+)) >> 1
195
+ when :bottom
196
+ vmargin = @size[1] - @heights.inject(:+)
197
+ end
198
+ @sprite = Sprite.new({size: @size, type: :ac})
199
+ Drawing.fill(@sprite, [0, 0, 0])
200
+ Bitmap.ck_to_ac!(@sprite, [0, 0, 0])
201
+ @locate = Point.new(@margins.shift, vmargin)
202
+ text instance_eval(&text_block)
203
+ @font.size = org_size
204
+ @font.color = org_color
205
+ return @sprite
206
+ end
207
+
208
+ def set_font_size_inner(text_block) #:nodoc:
209
+ @max_height = @font.line_height
210
+ @margins = []
211
+ @heights = []
212
+ @lines = 1
213
+ tcalc(text_block)
214
+ end
215
+
216
+ def calc(block) #:nodoc:
217
+ @locate = Point.new(0, 0)
218
+ @img_size = Size.new(0, 0)
219
+ @max_height = @font.line_height
220
+ @lines = 1
221
+ @calc_mode = true
222
+ text instance_eval(&block)
223
+ @calc_mode = false
224
+ if @locate.x != 0
225
+ @margins << @locate.x
226
+ @img_size.w = [@locate.x, @img_size.w].max
227
+ @img_size.h += @max_height
228
+ @heights << @max_height
229
+ end
230
+ return @img_size
231
+ end
232
+
233
+ def tcalc(block) #:nodoc:
234
+ @locate = Point.new(0, 0)
235
+ @img_size = Size.new(0, 0)
236
+ @calc_mode = true
237
+ text instance_eval(&block)
238
+ @calc_mode = false
239
+ if @locate.x != 0
240
+ @margins << @locate.x if @locate.x != 0
241
+ @heights << @max_height
242
+ end
243
+ @img_size.w = [@locate.x, @img_size.w].max
244
+ end
245
+
246
+ #===Shape.textメソッドのブロック内で使用する、文字描画指示メソッド
247
+ #(例)Shape.text(){ text "abc" }
248
+ #(例)Shape.takahashi(:size=>[200,200]){ text "名前重要" }
249
+ #_text_:: 描画するテキスト
250
+ #返却値:: 自分自身
251
+ def text(txt)
252
+ return self if txt.eql?(self)
253
+ txt = txt.gsub(/[\n\r\t\f]/,"")
254
+ @font.draw_text(@sprite, txt, @locate.x, @locate.y) unless @calc_mode
255
+ @locate.x += @font.text_size(txt)[0]
256
+ return self
257
+ end
258
+
259
+ #===Shape.text/takahashiメソッドのブロック内で使用する、文字色指示メソッド
260
+ #ブロック内で指定した範囲でのみ色が変更される
261
+ #(例)Shape.text(){ text "abc"; cr; color(:red){"def"} }
262
+ #_color_:: 変更する色([r,g,b])もしくはColor[]メソッドの引数
263
+ #返却値:: 自分自身
264
+ def color(color, &block)
265
+ @font.color_during(Color.to_rgb(color)){ text instance_eval(&block) }
266
+ return self
267
+ end
268
+
269
+ #===Shape.textメソッドのブロック内で使用する、文字サイズ指示メソッド
270
+ #ブロック内で指定した範囲でのみサイズが変更される
271
+ #(例)Shape.text(){ text "abc"; cr; size(16){"def"} }
272
+ #_size_:: 変更するサイズ(整数)
273
+ #返却値:: 自分自身
274
+ def size(size, &block)
275
+ @font.size_during(size){
276
+ @max_height = [@max_height, @font.line_height].max
277
+ size_inner(@font.margin_height(@valign, @max_height), &block)
278
+ }
279
+ return self
280
+ end
281
+
282
+ def size_inner(margin, &block) #:nodoc:
283
+ @locate.y += margin
284
+ text instance_eval(&block)
285
+ @locate.y -= margin
286
+ end
287
+
288
+ #===Shape.textメソッドのブロック内で使用する、太文字指示メソッド
289
+ #ブロック内で指定した範囲でのみ太文字になる
290
+ #(使用すると文字の端が切れてしまう場合あり!)
291
+ #(例)Shape.text(){ text "abc"; cr; bold{"def"} }
292
+ #返却値:: 自分自身
293
+ def bold(&block)
294
+ @font.bold{ text instance_eval(&block) }
295
+ return self
296
+ end
297
+
298
+ #===Shape.textメソッドのブロック内で使用する、斜体指示メソッド
299
+ #ブロック内で指定した範囲でのみ斜体文字になる
300
+ #(使用すると文字の端が切れてしまう場合あり!)
301
+ #(例)Shape.text(){ text "abc"; cr; italic{"def"} }
302
+ #返却値:: 自分自身
303
+ def italic(&block)
304
+ @font.italic{ text instance_eval(&block) }
305
+ return self
306
+ end
307
+
308
+ #===Shape.textメソッドのブロック内で使用する、下線指示メソッド
309
+ #ブロック内で指定した範囲でのみ文字に下線が付く
310
+ #(例)Shape.text(){ text "abc"; cr; bold{"def"} }
311
+ #返却値:: 自分自身
312
+ def under_line(&block)
313
+ @font.under_line{ text instance_eval(&block) }
314
+ return self
315
+ end
316
+
317
+ #===Shape.text/takahashiメソッドのブロック内で使用する、改行指示メソッド
318
+ #(例)Shape.text(){ text "abc"; cr; bold{"def"} }
319
+ #返却値:: 自分自身
320
+ def cr
321
+ if @calc_mode
322
+ @margins << @locate.x
323
+ @heights << @max_height
324
+ @img_size.w = [@locate.x, @img_size.w].max
325
+ @img_size.h += @max_height
326
+ @locate.x = 0
327
+ @lines += 1
328
+ else
329
+ @locate.x = @margins.shift || 0
330
+ end
331
+ @locate.y += @max_height
332
+ return self
333
+ end
334
+
335
+ def box(param) #:nodoc:
336
+ init_parameter(param)
337
+ s = Sprite.new(size: [w, h], type: :alpha_channel)
338
+ w = @size[0]
339
+ h = @size[1]
340
+ Drawing.fill(s, [0, 0, 0])
341
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
342
+ if @edge
343
+ width = @edge[:width]
344
+ Drawing.rect(s, [0, 0, w, h], Color.to_rgb(@edge[:color]), true)
345
+ Drawing.rect(s, [width, width, w-width*2-1, h-width*2-1], Color.to_rgb(@color), true)
346
+ else
347
+ Drawing.rect(s, [0, 0, w, h], Color.to_rgb(@color), true)
348
+ end
349
+ return s
350
+ end
351
+
352
+ def roundbox_basic(s, x, y, w, h, r, c) #:nodoc:
353
+ color = Color.to_rgb(c)
354
+ Drawing.circle(s, [r+x, r+y], r, color, true)
355
+ Drawing.circle(s, [w-r-x-1, r+y], r, color, true)
356
+ Drawing.circle(s, [r+x, h-r-y-1], r, color, true)
357
+ Drawing.circle(s, [w-r-x-1, h-r-y-1], r, color, true)
358
+ Drawing.rect(s, [x, y+r, w-x*2, h-y*2-r*2], color, true)
359
+ Drawing.rect(s, [x+r, y, w-x*2-r*2, h-x*2], color, true)
360
+ end
361
+
362
+ def roundbox(param) #:nodoc:
363
+ init_parameter(param)
364
+ w = @size[0]
365
+ h = @size[1]
366
+ s = Sprite.new(size: @size, type: :ac)
367
+ Drawing.fill(s, [0, 0, 0])
368
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
369
+ if @edge
370
+ roundbox_basic(s, [0, 0, w, h], @ray, Color.to_rgb(@edge[:color]))
371
+ roundbox_basic(s, [@edge[:width], @edge[:width], w, h], @ray, Color.to_rgb(@color))
372
+ else
373
+ roundbox_basic(s, [0, 0, w, h], @ray, Color.to_rgb(@color))
374
+ end
375
+ return s
376
+ end
377
+
378
+ def circle(param) #:nodoc:
379
+ init_parameter(param)
380
+ s = Sprite.new(size: [@ray*2+1, @ray*2+1], type: :alpha_channel)
381
+ Drawing.fill(s, [0, 0, 0])
382
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
383
+ if @edge
384
+ et, ec = sp.get_param(:edge)[0..1]
385
+ Drawing.circle(s, [@ray, @ray], @ray, Color.to_rgb(@edge[:color]), true)
386
+ Drawing.circle(s, [@ray, @ray], @ray-@edge[:width], Color.to_rgb(@color), true)
387
+ else
388
+ Drawing.circle(s, [@ray, @ray], @ray, Color.to_rgb(@color), true)
389
+ end
390
+ return s
391
+ end
392
+
393
+ def ellipse(param) #:nodoc:
394
+ init_parameter(param)
395
+ w = @size[0]
396
+ w2 = w * 2 + 1
397
+ h = @size[1]
398
+ h2 = h * 2 + 1
399
+ s = Sprite.new(size: [w2, h2], type: :alpha_channel)
400
+ Drawing.fill(s, [0, 0, 0])
401
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
402
+ if @edge
403
+ Drawing.ellipse(s, [w, h], w, h, Color.to_rgb(@edge[:color]), true)
404
+ Drawing.ellipse(s, [w, h], w-@edge[:width], h-@edge[:width], Color.to_rgb(@color), true)
405
+ else
406
+ Drawing.ellipse(s, [w, h], w, h, Color.to_rgb(@color), true)
407
+ end
408
+ return s
409
+ end
410
+
411
+ def polygon(param) #:nodoc:
412
+ init_parameter(param)
413
+
414
+ min_x, max_x = @vertexes.map{|v| v[0]}.minmax
415
+ min_y, max_y = @vertexes.map{|v| v[1]}.minmax
416
+
417
+ w = max_x - min_x
418
+ h = max_y - min_y
419
+
420
+ @vertexes = @vertexes.map{|v| [v[0]-min_x, v[1]-min_y]}
421
+
422
+ s = Sprite.new(size: [w, h], type: :alpha_channel)
423
+ Drawing.fill(s, [0, 0, 0])
424
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
425
+ Drawing.polygon(s, @vertexes, Color.to_rgb(@color), true)
426
+ return s
427
+ end
428
+
429
+ private :roundbox_basic
430
+ end
431
+ end
432
+
433
+ class String
434
+ #===文字列から、その文字を描画したスプライトを作成する
435
+ #自分自身が持つ文字列をShape.textメソッドを使用して画像を作成する
436
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
437
+ #_data_:: 描画するフォント(Fontクラスのインスタンス)
438
+ def to_sprite(data)
439
+ sprite = Miyako::Shape.text({:text => self, :font => data})
440
+ yield sprite if block_given?
441
+ return sprite
442
+ end
443
+ end
@@ -0,0 +1,752 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ # スプライト関連クラス群
24
+ module Miyako
25
+ #==スプライト管理クラス
26
+ class Sprite
27
+ include SpriteBase
28
+ include Animation
29
+ include Layout
30
+ include SingleEnumerable
31
+ extend Forwardable
32
+
33
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
34
+ attr_reader :tr_color #カラーキーが有向になっている場合のRGB値。[R,G,B]の配列(各要素は0~255の整数)
35
+ attr_reader :type #画像の透明度・透過タイプを取得する(詳細はSprite.newメソッドを参照)
36
+
37
+ @@abb = {:ck => :color_key, :as => :alpha_surface, :ac => :alpha_channel}
38
+
39
+ def setup #:nodoc:
40
+ @unit = SpriteUnitFactory.create
41
+ @aa = false
42
+ @tr_color = Color[:black]
43
+ @update = nil
44
+ @w = 0
45
+ @h = 0
46
+ @draw_list = nil
47
+ @visible = true
48
+ end
49
+
50
+ private :setup
51
+
52
+ #===インスタンス生成
53
+ #スプライトをファイルや画像サイズから生成します。
54
+ #
55
+ #v1.5以前は、ファイルからスプライトを生成するときは、ファイル名で画像が共有されていましたが、
56
+ #v2.0では廃止されました。
57
+ #
58
+ #_param_:: 各種設定(ハッシュ引数。詳細は後述)
59
+ #返却値:: 生成したインスタンス
60
+ #
61
+ #<引数の内容>
62
+ #* 1.画像の元データ(括弧内は省略形)。以下の3種類のどれかを必ず指定する。
63
+ # * 画像ファイル(ファイル名)から生成。 (書式):filename(:file)=>画像ファイル名 (例):file=>"image.png"
64
+ # * 画像サイズ(2要素の整数の配列もしくはSize構造体)から生成。
65
+ #  (書式1):size=>2要素の配列((例):size=>[100,100])
66
+ #  (書式2):size=>Size構造体((例):size=>Size.new(100,100))
67
+ # * SDL::Surfaceクラスのインスタンスから生成。 
68
+ # (書式):bitmap(:bmp)=>SDL::Surfaceクラスのインスタンス((例):bmp=>@surface)
69
+ # * SpriteUnit構造体のインスタンスから生成(ビットマップ以外のUnitの値は引き継がれる。
70
+ # しかし、snapの親子関係は引き継がれない)。
71
+ # (書式):unit=>SpriteUnit構造体のインスタンス((例):unit=>@spr.to_unit)
72
+ #* 2.透過設定(括弧内は省略形)。以下の3種類のどれかを必ず指定する。
73
+ # * カラーキーによる透過は行わない方式(デフォルトの方式) (書式):type=>:alpha_surface(:as)
74
+ # * カラーキーの指定。 (書式):type=>:color_key(:ck) カラーキー指定の方法は以下のとおり
75
+ # * 透明色にするピクセルの位置(2要素の整数の配列、Point構造体)
76
+ #  (書式1):point=>2要素の配列((例):type=>:ck, :point=>[20,20])
77
+ #  (書式2):point=>Point構造体((例):type=>:ck, :point=>Point.new(20,20))
78
+ # * 色を直接指定
79
+ #  (書式):tr_color=>色情報(Color.to_rgbメソッドで生成できるパラメータ)
80
+ # ((例1):type=>:ck, :tr_color=>[255,0,255] # 紫色を透明色に
81
+ #  (例2):type=>:ck, :tr_color=>:red # 赤色を透明色に)
82
+ # * デフォルト:画像の[0,0]の位置にあるピクセルの色
83
+ #* 3. αチャネル付き画像を使用(設定変更不可) (書式):type=>:alpha_channel(:ac)
84
+ def initialize(param)
85
+ raise MiyakoError, "Sprite parameter is not Hash!" unless param.kind_of?(Hash)
86
+ setup
87
+ init_layout
88
+
89
+ bitmap = nil
90
+ @tr_color = nil
91
+
92
+ param[:type] ||= :color_key
93
+ param[:type] = @@abb[param[:type]] if @@abb.has_key?(param[:type])
94
+ param[:point] ||= Point.new(0, 0)
95
+ param[:tr_color] ||= Color[:black]
96
+ param[:is_fill] ||= false
97
+
98
+ if param.has_key?(:bitmap) || param.has_key?(:bmp)
99
+ bitmap = param[:bitmap] || param[:bmp]
100
+ elsif param.has_key?(:size)
101
+ bitmap = Bitmap.create(*(param[:size].to_a))
102
+ param[:is_fill] = true
103
+ elsif param.has_key?(:filename) || param.has_key?(:file)
104
+ bitmap = Bitmap.load(param[:filename] || param[:file])
105
+ elsif param.has_key?(:unit)
106
+ bitmap = param[:unit].bitmap
107
+ else
108
+ raise MiyakoError, "Illegal Sprite parameter!"
109
+ end
110
+
111
+ case param[:type]
112
+ when :color_key
113
+ if param.has_key?(:point)
114
+ @tr_color = Color.to_rgb(bitmap.get_rgb(bitmap.getPixel(*(param[:point].to_a))))
115
+ else
116
+ @tr_color = Color.to_rgb(param[:tr_color])
117
+ end
118
+ # カラーキーのα値を0にしたビットマップを作成
119
+ tbitmap = bitmap.display_format
120
+ tunit = SpriteUnitFactory.create(:bitmap => tbitmap)
121
+ bitmap = Bitmap.create(bitmap.w, bitmap.h, SDL::HWSURFACE)
122
+ bitmap = bitmap.display_format_alpha
123
+ nunit = SpriteUnitFactory.create(:bitmap => bitmap)
124
+ Bitmap.ck_to_ac(tunit, nunit, @tr_color)
125
+ self.bitmap = bitmap
126
+ @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0, 0]) if param[:is_fill]
127
+ tbitmap = nil
128
+ when :alpha_surface
129
+ # カラーキーのα値を0にしたビットマップを作成
130
+ tbitmap = bitmap.display_format
131
+ tunit = SpriteUnitFactory.create(:bitmap => tbitmap)
132
+ bitmap = Bitmap.create(bitmap.w, bitmap.h, SDL::HWSURFACE)
133
+ bitmap = bitmap.display_format_alpha
134
+ nunit = SpriteUnitFactory.create(:bitmap => bitmap)
135
+ Bitmap.normal_to_ac(tunit, nunit)
136
+ self.bitmap = bitmap
137
+ @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0, 0]) if param[:is_fill]
138
+ tbitmap = nil
139
+ when :alpha_channel
140
+ self.bitmap = bitmap.display_format_alpha
141
+ @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0, 0]) if param[:is_fill]
142
+ when :movie
143
+ self.bitmap = bitmap.display_format
144
+ end
145
+ @type = param[:type]
146
+
147
+ if param.has_key?(:unit)
148
+ SpriteUnitFactory.apply(@unit, :ow=>param[:unit].ow, :oh=>param[:unit].oh,
149
+ :cx => param[:unit].cx, :cy => param[:unit].cy)
150
+ self.move_to(param[:unit].x, param[:unit].y)
151
+ end
152
+ end
153
+
154
+ def_delegators(:@unit, :ox, :oy, :ow, :oh, :x, :y)
155
+
156
+ def update_layout_position #:nodoc:
157
+ @unit.move_to(*@layout.pos)
158
+ end
159
+
160
+ #===画像の幅を取得する
161
+ #返却値:: 画像の幅(ピクセル)
162
+ def w
163
+ return @unit.bitmap.w
164
+ end
165
+
166
+ #===画像の高さを取得する
167
+ #返却値:: 画像の高さ(ピクセル)
168
+ def h
169
+ return @unit.bitmap.h
170
+ end
171
+
172
+ def bitmap #:nodoc:
173
+ return @unit.bitmap
174
+ end
175
+
176
+ def bitmap=(bmp) #:nodoc:
177
+ @unit.bitmap = bmp
178
+ @unit.ow = @unit.bitmap.w
179
+ @unit.oh = @unit.bitmap.h
180
+ @w = @unit.bitmap.w
181
+ @h = @unit.bitmap.h
182
+ set_layout_size(@unit.ow, @unit.oh)
183
+ end
184
+
185
+ #===画像全体を指定の色で塗りつぶす
186
+ #_color_:: 塗りつぶす色。Color.to_rgbメソッドのパラメータでの指定が可能
187
+ #返却値:: 自分自身を返す
188
+ def fill(color)
189
+ @unit.bitmap.fill_rect(0,0,self.w,self.h,Color.to_rgb(color))
190
+ return self
191
+ end
192
+
193
+ #===画像の表示開始位置(X座標)を指定する
194
+ #oxを指定すると、表示の左上位置が変更される。
195
+ #値が画像の幅の範囲外(値がマイナス、画像の幅を超える値)のときは例外が発生する
196
+ #_v_:: 表示開始位置。整数で指定
197
+ def ox=(v)
198
+ raise MiyakoError, "Illegal ox parameter! : #{v}" if (v < 0 || (v+@unit.ow) > @w)
199
+ @unit.ox = v
200
+ end
201
+
202
+ #===画像の表示開始位置(Y座標)を指定する
203
+ #oyを指定すると、表示の左上位置が変更される。
204
+ #値が画像の高さの範囲外(値がマイナス、画像の高さを超える値)のときは例外が発生する
205
+ #_v_:: 表示開始位置。整数で指定
206
+ def oy=(v)
207
+ raise MiyakoError, "Illegal oy parameter! : #{v}" if (v < 0 || (v+@unit.oh) > @h)
208
+ @unit.oy = v
209
+ end
210
+
211
+ #===画像の表示幅を指定する
212
+ #owを指定すると、横方向の一部のみ表示される。
213
+ #値が画像の幅の範囲外(値がマイナス、画像の幅を超える値)のときは例外が発生する
214
+ #_v_:: 表示幅。整数で指定
215
+ def ow=(v)
216
+ raise MiyakoError, "Illegal ox parameter! : #{v}" if (v < 0 || (@unit.ox+v) > @w)
217
+ @unit.ow = v
218
+ set_layout_size(v, @unit.oh)
219
+ end
220
+
221
+ #===画像の表示高を指定する
222
+ #ohを指定すると、縦方向の一部のみ表示される。
223
+ #値が画像の高さの範囲外(値がマイナス、画像の高さを超える値)のときは例外が発生する
224
+ #_v_:: 表示高。整数で指定
225
+ def oh=(v)
226
+ raise MiyakoError, "Illegal ox parameter! : #{v}" if (v < 0 || (@unit.oy+v) > @h)
227
+ @unit.oh = v
228
+ set_layout_size(@unit.ow, v)
229
+ end
230
+
231
+ #===画像の回転・拡大・縮小の中心座標を取得する
232
+ #x方向の中心座標を取得する
233
+ #返却値:: 中心座標。
234
+ def center_x
235
+ return @unit.cx
236
+ end
237
+
238
+ #===画像の回転・拡大・縮小の中心座標を取得する
239
+ #x方向の中心座標を取得する
240
+ #_pos_:: 中心座標
241
+ def center_x=(pos)
242
+ @unit.cx = pos
243
+ end
244
+
245
+ #===画像の回転・拡大・縮小の中心座標を取得する
246
+ #y方向の中心座標を取得する
247
+ #返却値:: 中心座標。
248
+ def center_y
249
+ return @unit.cy
250
+ end
251
+
252
+ #===画像の回転・拡大・縮小の中心座標を取得する
253
+ #y方向の中心座標を取得する
254
+ #_pos_:: 中心座標
255
+ def center_y=(pos)
256
+ @unit.cy = pos
257
+ end
258
+
259
+ #===画像の表示矩形を取得する
260
+ #画像が表示されているときの矩形(Rect構造体)を取得する
261
+ #返却値:: 生成された矩形(Rect構造体インスタンス)
262
+ def rect
263
+ return Rect.new(@unit.x, @unit.y, @unit.ow, @unit.oh)
264
+ end
265
+
266
+ #===現在の画面の最大の大きさを矩形で取得する
267
+ #但し、Spriteの場合は最大の大きさ=スプライトの大きさなので、rectと同じ値が得られる
268
+ #返却値:: 画像の大きさ(Rect構造体のインスタンス)
269
+ def broad_rect
270
+ return self.rect
271
+ end
272
+
273
+ def update #:nodoc:
274
+ @update.call(self) if @update
275
+ yield self if block_given?
276
+ return self
277
+ end
278
+
279
+ def update=(u) #:nodoc:
280
+ @update = u
281
+ end
282
+
283
+ #===画像を解放する
284
+ #内部で使用しているデータをインスタンスから解放する
285
+ def dispose
286
+ layout_dispose
287
+ @unit.bitmap = nil
288
+ @unit = nil
289
+ end
290
+
291
+ #===インスタンスをSpriteUnit構造体に変換して取得する
292
+ #得られるインスタンスは複写していないので、インスタンスの値を調整するには、dupメソッドで複製する必要がある
293
+ #返却値:: SpriteUnit化したスプライト
294
+ def to_unit
295
+ return @unit
296
+ end
297
+
298
+ #===インスタンスをスプライト化して返す
299
+ #インスタンスの複製を行う(画像インスタンスも複製)
300
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
301
+ #注意事項:
302
+ #1.複製のため、呼び出していくとメモリ使用量が著しく上がる
303
+ #2.レイアウト情報がリセットされる(snapの親子関係が解消される)
304
+ #返却値:: 生成したインスタンスを返す
305
+ def to_sprite
306
+ unit = @unit.dup
307
+ unit.bitmap = Bitmap.create(unit.bitmap.w, unit.bitmap.h)
308
+ sprite = Sprite.new(size: [unit.bitmap.w, unit.bitmap.h], type: :ac)
309
+ Drawing.fill(sprite, [0,0,0])
310
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
311
+ Bitmap.blit_aa(self, sprite, 0, 0)
312
+ yield sprite if block_given?
313
+ return sprite
314
+ end
315
+
316
+ #===画像の内容を破壊的に消去する
317
+ #インスタンスの複製を行う(画像インスタンスも複製)
318
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
319
+ #注意事項:
320
+ #1.複製のため、呼び出していくとメモリ使用量が著しく上がる
321
+ #2.レイアウト情報がリセットされる(snapの親子関係が解消される)
322
+ #返却値:: 自分自身を返す
323
+ def clear!
324
+ Drawing.fill(self, [0,0,0])
325
+ Bitmap.ck_to_ac!(self, [0,0,0])
326
+ return self
327
+ end
328
+
329
+ #===インスタンスの内容を別のインスタンスに描画する
330
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
331
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
332
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
333
+ #ブロックの引数は、|転送元のSpriteUnit,転送先のSpriteUnit|となる。
334
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
335
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
336
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
337
+ #返却値:: 自分自身を返す
338
+ def Sprite.render_to(src, dst)
339
+ end
340
+
341
+ #===インスタンスの内容を画面に描画する
342
+ #現在の画像を、現在の状態で描画するよう指示する
343
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
344
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
345
+ #ブロックの引数は、|インスタンスのSpriteUnit, 画面のSpriteUnit|となる。
346
+ #visibleメソッドの値がfalseのときは描画されない。
347
+ #返却値:: 自分自身を返す
348
+ def render
349
+ end
350
+
351
+ #===インスタンスの内容を別のインスタンスに描画する
352
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
353
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
354
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
355
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
356
+ #ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
357
+ #visibleメソッドの値がfalseのときは描画されない。
358
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
359
+ #返却値:: 自分自身を返す
360
+ def render_to(dst)
361
+ end
362
+
363
+ #===インスタンスの内容を画面に描画する(回転/拡大/縮小/鏡像付き)
364
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。回転の中心はsrc側(ox,oy)を起点に、src側(cx,cy)が中心になるように設定する。
365
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、画面側SpriteUnitの(cx,cy)が中心になるように設定にする。
366
+ #回転角度が正だと右回り、負だと左回りに回転する
367
+ #変形の度合いは、src側SpriteUnitのxscale, yscaleを使用する(ともに実数で指定する)。それぞれ、x方向、y方向の度合いとなる
368
+ #度合いが scale > 1.0 だと拡大、 0 < scale < 1.0 だと縮小、scale < 0.0 負だと鏡像の拡大・縮小になる(scale == -1.0 のときはミラー反転になる)
369
+ #また、変形元の幅・高さのいずれかが32768以上の時は回転・転送を行わない
370
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
371
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
372
+ #ブロックの引数は、|インスタンスのSpriteUnit,画面のSpriteUnit|となる。
373
+ #visibleメソッドの値がfalseのときは描画されない。
374
+ #_radian_:: 回転角度。単位はラジアン。値の範囲は0<=radian<2pi
375
+ #_xscale_:: 拡大率(x方向)
376
+ #_yscale_:: 拡大率(y方向)
377
+ #返却値:: 自分自身を返す
378
+ def render_transform(radian, xscale, yscale)
379
+ end
380
+
381
+ #===インスタンスの内容を画面に描画する(回転/拡大/縮小/鏡像付き)
382
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。回転の中心はsrc側(ox,oy)を起点に、src側(cx,cy)が中心になるように設定する。
383
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、画面側SpriteUnitの(cx,cy)が中心になるように設定にする。
384
+ #回転角度が正だと右回り、負だと左回りに回転する
385
+ #変形の度合いは、src側SpriteUnitのxscale, yscaleを使用する(ともに実数で指定する)。それぞれ、x方向、y方向の度合いとなる
386
+ #度合いが scale > 1.0 だと拡大、 0 < scale < 1.0 だと縮小、scale < 0.0 負だと鏡像の拡大・縮小になる(scale == -1.0 のときはミラー反転になる)
387
+ #また、変形元の幅・高さのいずれかが32768以上の時は回転・転送を行わない
388
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
389
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
390
+ #ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
391
+ #visibleメソッドの値がfalseのときは描画されない。
392
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
393
+ #_radian_:: 回転角度。単位はラジアン。値の範囲は0<=radian<2pi
394
+ #_xscale_:: 拡大率(x方向)
395
+ #_yscale_:: 拡大率(y方向)
396
+ #返却値:: 自分自身を返す
397
+ def render_to_transform(dst, radian, xscale, yscale)
398
+ end
399
+
400
+ #===2つの画像のandを取り、別の画像へ転送する
401
+ #重ね合わせの式は、"src and self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
402
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
403
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
404
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
405
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
406
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
407
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
408
+ #返却値:: 変更後の新しい画像インスタンス
409
+ def and(src, &block)
410
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
411
+ self.render_to(dst)
412
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_and(src, dst, &block)
413
+ return dst
414
+ end
415
+
416
+ #===2つの画像のandを破壊的に行う
417
+ #重ね合わせの式は、"src and self -> self"で表される。
418
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
419
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
420
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
421
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
422
+ #ブロックの引数は、|SpriteUnit|となる。
423
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
424
+ #返却値:: 変更後の自分自身を返す
425
+ def and!(src, &block)
426
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_and(src, self, &block)
427
+ return self
428
+ end
429
+
430
+ #===2つの画像のorを取り、別の画像へ転送する
431
+ #重ね合わせの式は、"src or self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
432
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
433
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
434
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
435
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
436
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
437
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
438
+ #返却値:: 変更後の新しい画像インスタンス
439
+ def or(src, &block)
440
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
441
+ self.render_to(dst)
442
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_or(src, dst, &block)
443
+ return dst
444
+ end
445
+
446
+ #===2つの画像のorを破壊的に行う
447
+ #重ね合わせの式は、"src or self -> self"で表される。
448
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
449
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
450
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
451
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
452
+ #ブロックの引数は、|SpriteUnit|となる。
453
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
454
+ #返却値:: 変更後の自分自身を返す
455
+ def or!(src, &block)
456
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_or(src, self, &block)
457
+ return self
458
+ end
459
+
460
+ #===2つの画像のxorを取り、別の画像へ転送する
461
+ #重ね合わせの式は、"src xor self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
462
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
463
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
464
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
465
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
466
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
467
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
468
+ #返却値:: 変更後の新しい画像インスタンス
469
+ def xor(src, &block)
470
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
471
+ self.render_to(dst)
472
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_xor(src, dst, &block)
473
+ return dst
474
+ end
475
+
476
+ #===2つの画像のxorを破壊的に行う
477
+ #重ね合わせの式は、"src xor self -> self"で表される。
478
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
479
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
480
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
481
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
482
+ #ブロックの引数は、|SpriteUnit|となる。
483
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
484
+ #返却値:: 変更後の自分自身を返す
485
+ def xor!(src, &block)
486
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_xor(src, self, &block)
487
+ return self
488
+ end
489
+
490
+ #===画像のαチャネルの値を一定の割合で変化させて転送する
491
+ #degreeの値が1.0に近づけば近づくほど透明に近づき、
492
+ #degreeの値が-1.0に近づけば近づくほど不透明に近づく(値が-1.0のときは完全不透明、値が0.0のときは変化なし、1.0のときは完全に透明になる)
493
+ #但し、元々αの値がゼロの時は変化しない
494
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
495
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
496
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
497
+ #_degree_:: 減少率。-1.0<=degree<=1.0までの実数
498
+ #返却値:: 変更後の新しい画像インスタンス
499
+ def dec_alpha(degree, &block)
500
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
501
+ raise MiyakoError, "illegal range!" unless Bitmap.dec_alpha(self, dst, degree, &block)
502
+ return dst
503
+ end
504
+
505
+ #===画像のαチャネルの値を一定の割合で破壊的に変化させる
506
+ #degreeの値が1.0に近づけば近づくほど透明に近づき、
507
+ #degreeの値が-1.0に近づけば近づくほど不透明に近づく
508
+ #(値が-1.0のときは完全不透明、値が0.0のときは変化なし、1.0のときは完全に透明になる)
509
+ #但し、元々αの値がゼロの時は変化しない
510
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
511
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
512
+ #ブロックの引数は、|SpriteUnit|となる。
513
+ #_degree_:: 減少率。-1.0<=degree<=1.0までの実数
514
+ #返却値:: 変更後の自分自身を返す
515
+ def dec_alpha!(degree, &block)
516
+ raise MiyakoError, "illegal range!" unless Bitmap.dec_alpha!(self, degree, &block)
517
+ return self
518
+ end
519
+
520
+ #===画像の色を一定の割合で黒に近づける(ブラックアウト)
521
+ #赤・青・緑・αの各要素を一定の割合で下げ、黒色に近づける。
522
+ #degreeの値が1.0に近づけば近づくほど黒色に近づく(値が0.0のときは変化なし、1.0のときは真っ黒になる)
523
+ #αの値が0のときは変わらないことに注意!
524
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
525
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
526
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
527
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
528
+ #返却値:: 変更後の新しい画像インスタンス
529
+ def black_out(degree, &block)
530
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
531
+ raise MiyakoError, "illegal range!" unless Bitmap.black_out(self, dst, degree, &block)
532
+ return dst
533
+ end
534
+
535
+ #===画像の色を一定の割合で黒に近づける(ブラックアウト)
536
+ #赤・青・緑・αの各要素を一定の割合で下げ、黒色に近づける。
537
+ #degreeの値が1.0に近づけば近づくほど黒色に近づく(値が0.0のときは変化なし、1.0のときは真っ黒になる)
538
+ #αの値が0のときは変わらないことに注意!
539
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
540
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
541
+ #ブロックの引数は、|SpriteUnit|となる。
542
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
543
+ #返却値:: 変更後の自分自身を返す
544
+ def black_out!(degree, &block)
545
+ raise MiyakoError, "illegal range!" unless Bitmap.black_out!(self, degree, &block)
546
+ return self
547
+ end
548
+
549
+ #===画像の色を一定の割合で白に近づける(ホワイトアウト)
550
+ #赤・青・緑・αの各要素を一定の割合で上げ、白色に近づける。
551
+ #degreeの値が1.0に近づけば近づくほど白色に近づく(値が0.0のときは変化なし、1.0のときは真っ白になる)
552
+ #αの値が0のときは変わらないことに注意!
553
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
554
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
555
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
556
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
557
+ #返却値:: 変更後の新しい画像インスタンス
558
+ def white_out(degree, &block)
559
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
560
+ raise MiyakoError, "illegal range!" unless Bitmap.white_out(self, dst, degree, &block)
561
+ return dst
562
+ end
563
+
564
+ #===画像の色を一定の割合で白に近づける(ホワイトアウト)
565
+ #赤・青・緑・αの各要素を一定の割合で上げ、白色に近づける。
566
+ #degreeの値が1.0に近づけば近づくほど白色に近づく(値が0.0のときは変化なし、1.0のときは真っ白になる)
567
+ #αの値が0のときは変わらないことに注意!
568
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
569
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
570
+ #ブロックの引数は、|SpriteUnit|となる。
571
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
572
+ #返却値:: 変更後の自分自身を返す
573
+ def white_out!(degree, &block)
574
+ raise MiyakoError, "illegal range!" unless Bitmap.white_out!(self, degree, &block)
575
+ return self
576
+ end
577
+
578
+ #===画像のRGB値を反転させる
579
+ #αチャネルの値は変更しない
580
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
581
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
582
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
583
+ #返却値:: 変更後の新しい画像インスタンス
584
+ def inverse(&block)
585
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
586
+ raise MiyakoError, "illegal range!" unless Bitmap.inverse(self, dst, &block)
587
+ return dst
588
+ end
589
+
590
+ #===画像のRGB値を反転させる
591
+ #αチャネルの値は変更しない
592
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
593
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
594
+ #ブロックの引数は、|SpriteUnit|となる。
595
+ #返却値:: 変更後の自分自身を返す
596
+ def inverse!(&block)
597
+ raise MiyakoError, "illegal range!" unless Bitmap.inverse!(self, &block)
598
+ return self
599
+ end
600
+
601
+ #===2枚の画像の加算合成を行う
602
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
603
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
604
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
605
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
606
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
607
+ #返却値:: 変更後の新しい画像インスタンス
608
+ def additive(src, &block)
609
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
610
+ self.render_to(dst)
611
+ raise MiyakoError, "illegal range!" unless Bitmap.additive(src, dst, &block)
612
+ return dst
613
+ end
614
+
615
+ #===2枚の画像の加算合成を行う
616
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
617
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
618
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
619
+ #ブロックの引数は、|SpriteUnit|となる。
620
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
621
+ #返却値:: 変更後の自分自身を返す
622
+ def additive!(src, &block)
623
+ raise MiyakoError, "illegal range!" unless Bitmap.additive(src, self, &block)
624
+ return self
625
+ end
626
+
627
+ #===2枚の画像の減算合成を行う
628
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
629
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
630
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
631
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
632
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
633
+ #返却値:: 変更後の新しい画像インスタンス
634
+ def subtraction(src, &block)
635
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
636
+ self.render_to(dst)
637
+ raise MiyakoError, "illegal range!" unless Bitmap.subtraction(src, dst, &block)
638
+ return dst
639
+ end
640
+
641
+ #===2枚の画像の減算合成を行う
642
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
643
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
644
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
645
+ #ブロックの引数は、|SpriteUnit|となる。
646
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
647
+ #返却値:: 変更後の自分自身を返す
648
+ def subtraction!(src, &block)
649
+ raise MiyakoError, "illegal range!" unless Bitmap.subtraction(src, self, &block)
650
+ return self
651
+ end
652
+
653
+ #===画像の色相を変更する
654
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
655
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
656
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
657
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
658
+ #返却値:: 変更後の新しい画像インスタンス
659
+ def hue(degree, &block)
660
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
661
+ raise MiyakoError, "illegal range!" unless Bitmap.hue(self, dst, degree, &block)
662
+ return dst
663
+ end
664
+
665
+ #===画像の色相を変更する
666
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
667
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
668
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
669
+ #ブロックの引数は、|SpriteUnit|となる。
670
+ #返却値:: 変更後の画像インスタンス
671
+ #返却値:: 変更後の自分自身を返す
672
+ def hue!(degree, &block)
673
+ puts "start"
674
+ raise MiyakoError, "illegal range!" unless Bitmap.hue!(self, degree, &block)
675
+ puts "finish"
676
+ return self
677
+ end
678
+
679
+ #===画像の彩度を変更する
680
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
681
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
682
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
683
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
684
+ #返却値:: 変更後の新しい画像インスタンス
685
+ def saturation(saturation, &block)
686
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
687
+ raise MiyakoError, "illegal range!" unless Bitmap.saturation(self, dst, saturation, &block)
688
+ return dst
689
+ end
690
+
691
+ #===画像の彩度を変更する
692
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
693
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
694
+ #ブロックの引数は、|SpriteUnit|となる。
695
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
696
+ #返却値:: 変更後の自分自身を返す
697
+ def saturation!(saturation, &block)
698
+ raise MiyakoError, "illegal range!" unless Bitmap.saturation!(self, saturation, &block)
699
+ return self
700
+ end
701
+
702
+ #===画像の明度を変更する
703
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
704
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
705
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
706
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
707
+ #返却値:: 変更後の新しい画像インスタンス
708
+ def value(value, &block)
709
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
710
+ raise MiyakoError, "illegal range!" unless Bitmap.value(self, dst, value, &block)
711
+ return dst
712
+ end
713
+
714
+ #===画像の明度を変更する
715
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
716
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
717
+ #ブロックの引数は、|SpriteUnit|となる。
718
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
719
+ #返却値:: 変更後の画像インスタンス
720
+ def value!(value, &block)
721
+ raise MiyakoError, "illegal range!" unless Bitmap.value!(self, value, &block)
722
+ return self
723
+ end
724
+
725
+ #===画像の色相・彩度・明度を変更する
726
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
727
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
728
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
729
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
730
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
731
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
732
+ #返却値:: 変更後の新しい画像インスタンス
733
+ def hsv(degree, saturation, value, &block)
734
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
735
+ raise MiyakoError, "illegal range!" unless Bitmap.hsv(self, dst, degree, saturation, value, &block)
736
+ return dst
737
+ end
738
+
739
+ #===画像の色相・彩度・明度を変更する
740
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
741
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
742
+ #ブロックの引数は、|SpriteUnit|となる。
743
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
744
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
745
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
746
+ #返却値:: 変更後の画像インスタンス
747
+ def hsv!(degree, saturation, value, &block)
748
+ raise MiyakoError, "illegal range!" unless Bitmap.hsv!(self, degree, saturation, value, &block)
749
+ return self
750
+ end
751
+ end
752
+ end