20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'ext/oily_png2swf/oily_png2swf_ext.c', line 20
VALUE bitmap_data(VALUE vself, VALUE vpixels) {
int pixel_size = RARRAY_LEN(vpixels);
unsigned long color;
int a; // alpha for swf bitmap data
float a_dash;
unsigned char r, g, b; // red, green, blue for swf bitmap data
unsigned char data[pixel_size * 4]; // argb for swf bitmap data
int i;
int data_index = 0;
for (i=0; i<pixel_size; ++i) {
color = NUM2ULONG((RARRAY_PTR(vpixels)[i]));
a = alpha(color);
a_dash = a / 255.0;
r = (unsigned char)(red(color) * a_dash);
g = (unsigned char)(green(color) * a_dash);
b = (unsigned char)(blue(color) * a_dash);
data[data_index] = a; ++data_index;
data[data_index] = r; ++data_index;
data[data_index] = g; ++data_index;
data[data_index] = b; ++data_index;
}
VALUE vdata;
vdata = rb_str_new(0,0); // 戻り値用にrubyの空文字を作成 vdata = '' と同じ
rb_str_cat(vdata, data, (pixel_size * 4)); // rubyの文字列としてバイナリデータを連結
return vdata;
}
|