9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'ext/hexapdf_cext/hexapdf_cext.c', line 9
VALUE separate_alpha_channel_loop(VALUE self, VALUE data, VALUE bytes_per_row, VALUE bytes_per_colors,
VALUE bytes_per_alpha, VALUE image_data, VALUE mask_data) {
long bpr = NUM2LONG(bytes_per_row);
long bpc = NUM2LONG(bytes_per_colors);
long bpa = NUM2LONG(bytes_per_alpha);
char* data_ptr = RSTRING_PTR(data);
long data_length = RSTRING_LEN(data);
char* current;
for (current = data_ptr; current - data_ptr + bpr <= data_length;) {
char* end = current + bpr;
rb_str_cat(image_data, current, 1);
rb_str_cat(mask_data, current, 1);
current++;
while (current < end) {
rb_str_cat(image_data, current, bpc);
current += bpc;
rb_str_cat(mask_data, current, bpa);
current += bpa;
}
}
return rb_str_drop_bytes(data, current - data_ptr);
}
|