static VALUE whitebalance(VALUE self, VALUE level) {
double red_filter[256], blue_filter[256];
int i, x, y;
+ int maxx = gdk_pixbuf_get_width(_SELF(self));
+ int maxy = gdk_pixbuf_get_height(_SELF(self));
guchar* pixels = gdk_pixbuf_get_pixels(_SELF(self));
int rowstride = gdk_pixbuf_get_rowstride(_SELF(self));
blue_filter[i] = pow(((double)i)/255, factor) * 255;
}
- for (y = 0; y < gdk_pixbuf_get_height(_SELF(self)); y++) {
+ for (y = 0; y < maxy; y++) {
guchar* pixline = &(pixels[rowstride*y]);
- for (x = 0; x < gdk_pixbuf_get_width(_SELF(self)); x++) {
+ for (x = 0; x < maxx; x++) {
pixline[x*3] = (guchar) red_filter[pixline[x*3]];
pixline[x*3+2] = (guchar) blue_filter[pixline[x*3+2]];
}
static VALUE gammacorrect(VALUE self, VALUE level) {
double filter[256];
int i, x, y;
+ int maxx = gdk_pixbuf_get_width(_SELF(self));
+ int maxy = gdk_pixbuf_get_height(_SELF(self));
guchar* pixels = gdk_pixbuf_get_pixels(_SELF(self));
int rowstride = gdk_pixbuf_get_rowstride(_SELF(self));
filter[i] = pow(((double)i)/255, factor) * 255;
}
- for (y = 0; y < gdk_pixbuf_get_height(_SELF(self)); y++) {
+ for (y = 0; y < maxy; y++) {
guchar* pixline = &(pixels[rowstride*y]);
- for (x = 0; x < gdk_pixbuf_get_width(_SELF(self)); x++) {
+ for (x = 0; x < maxx; x++) {
pixline[x*3] = (guchar) filter[pixline[x*3]];
pixline[x*3+1] = (guchar) filter[pixline[x*3+1]];
pixline[x*3+2] = (guchar) filter[pixline[x*3+2]];