Sha256: d21545e4d26c07ee309e2ed537d7ac3c1c8f05c27d7f18a05c826b0a9cd443a7

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

#include "psd_native_ext.h"

VALUE psd_native_combine_rgb_channel(VALUE self) {
  psd_logger("debug", "Beginning RGB processing");
  
  uint32_t num_pixels = FIX2UINT(rb_iv_get(self, "@num_pixels"));
  uint32_t pixel_step = FIX2UINT(rb_funcall(self, rb_intern("pixel_step"), 0));

  VALUE channels_info = rb_iv_get(self, "@channels_info");
  VALUE channel_data = rb_iv_get(self, "@channel_data");
  uint32_t channel_length = FIX2UINT(rb_iv_get(self, "@channel_length"));
  uint32_t channel_count = FIX2UINT(rb_funcall(channels_info, rb_intern("length"), 0));

  int i, j;
  uint32_t val, r, g, b, a;

  // Loop through every pixel in the image
  for (i = 0; i < num_pixels; i += pixel_step) {
    r = g = b = 0;
    a = 255;

    // And every channel for every pixel
    for (j = 0; j < channel_count; j++) {
      val = FIX2UINT(rb_ary_entry(channel_data, i + (channel_length * j)));

      // Get the hash containing channel info
      switch (FIX2INT(rb_hash_aref(rb_ary_entry(channels_info, j), ID2SYM(rb_intern("id"))))) {
        case -1: a = val; break;
        case 0:  r = val; break;
        case 1:  g = val; break;
        case 2:  b = val; break;
      }
    }

    rb_ary_push(rb_iv_get(self, "@pixel_data"), INT2FIX(BUILD_PIXEL(r, g, b, a)));
  }

  return Qnil;
}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
psd_native-0.2.0 ext/psd_native/image_mode_rgb.c
psd_native-0.1.0 ext/psd_native/image_mode_rgb.c