switch (orig->kind)
{ case GSK_COMPONENT_TRANSFER_IDENTITY: break; case GSK_COMPONENT_TRANSFER_LEVELS:
copy->levels.n = orig->levels.n; break; case GSK_COMPONENT_TRANSFER_LINEAR:
copy->linear.m = orig->linear.m;
copy->linear.b = orig->linear.b; break; case GSK_COMPONENT_TRANSFER_GAMMA:
copy->gamma.amp = orig->gamma.amp;
copy->gamma.exp = orig->gamma.exp;
copy->gamma.ofs= orig->gamma.ofs; break; case GSK_COMPONENT_TRANSFER_DISCRETE: case GSK_COMPONENT_TRANSFER_TABLE:
copy->table.n = orig->table.n;
copy->table.values = g_new (float, copy->table.n);
memcpy (copy->table.values, orig->table.values, orig->table.n * sizeof (float)); break; default:
g_assert_not_reached ();
}
}
staticinlinevoid
gsk_component_transfer_clear (GskComponentTransfer *self)
{ switch (self->kind)
{ case GSK_COMPONENT_TRANSFER_IDENTITY: case GSK_COMPONENT_TRANSFER_LEVELS: case GSK_COMPONENT_TRANSFER_LINEAR: case GSK_COMPONENT_TRANSFER_GAMMA: break; case GSK_COMPONENT_TRANSFER_DISCRETE: case GSK_COMPONENT_TRANSFER_TABLE:
g_free (self->table.values); break; default:
g_assert_not_reached ();
}
}
staticinlinefloat
gsk_component_transfer_apply (const GskComponentTransfer *self, float c)
{ switch (self->kind)
{ case GSK_COMPONENT_TRANSFER_IDENTITY: return c; case GSK_COMPONENT_TRANSFER_LEVELS: return (floorf (c * self->levels.n) + 0.5f) / self->levels.n; case GSK_COMPONENT_TRANSFER_LINEAR: return c * self->linear.m + self->linear.b; case GSK_COMPONENT_TRANSFER_GAMMA: return self->gamma.amp * powf (c, self->gamma.exp) + self->gamma.ofs; case GSK_COMPONENT_TRANSFER_DISCRETE:
{ float n = self->table.n; for (int k = 0; k < n; k++)
{ if (k / n <= c && c < (k + 1) / n) return self->table.values[k];
} return self->table.values[self->table.n - 1];
} case GSK_COMPONENT_TRANSFER_TABLE:
{ float n = self->table.n - 1; for (int k = 0; k < n; k++)
{ if (k / n <= c && c < (k + 1) / n) return self->table.values[k] + (c - k / n) * n * (self->table.values[k+1] - self->table.values[k]);
} return self->table.values[self->table.n - 1];
} default:
g_assert_not_reached ();
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.