Module: OilyPng2swf::DefineBitsLossless2

Included in:
Png2swf::DefineBitsLossless2
Defined in:
ext/oily_png2swf/oily_png2swf_ext.c

Instance Method Summary collapse

Instance Method Details

#bitmap_data(vpixels) ⇒ Object



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;
}