Module: HexaPDFCExt

Defined in:
ext/hexapdf_cext/hexapdf_cext.c

Class Method Summary collapse

Class Method Details

.separate_alpha_channel_loop(data, bytes_per_row, bytes_per_colors, bytes_per_alpha, image_data, mask_data) ⇒ Object



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