mirror of
https://github.com/lovell/sharp.git
synced 2026-02-04 13:46:19 +01:00
Add support to recomb operation for 4x4 matrices
This commit is contained in:
@@ -183,19 +183,21 @@ namespace sharp {
|
||||
* Recomb with a Matrix of the given bands/channel size.
|
||||
* Eg. RGB will be a 3x3 matrix.
|
||||
*/
|
||||
VImage Recomb(VImage image, std::unique_ptr<double[]> const &matrix) {
|
||||
double *m = matrix.get();
|
||||
VImage Recomb(VImage image, std::vector<double> const& matrix) {
|
||||
double* m = const_cast<double*>(matrix.data());
|
||||
image = image.colourspace(VIPS_INTERPRETATION_sRGB);
|
||||
return image
|
||||
.recomb(image.bands() == 3
|
||||
? VImage::new_from_memory(
|
||||
m, 9 * sizeof(double), 3, 3, 1, VIPS_FORMAT_DOUBLE
|
||||
)
|
||||
: VImage::new_matrixv(4, 4,
|
||||
m[0], m[1], m[2], 0.0,
|
||||
m[3], m[4], m[5], 0.0,
|
||||
m[6], m[7], m[8], 0.0,
|
||||
0.0, 0.0, 0.0, 1.0));
|
||||
if (matrix.size() == 9) {
|
||||
return image
|
||||
.recomb(image.bands() == 3
|
||||
? VImage::new_matrix(3, 3, m, 9)
|
||||
: VImage::new_matrixv(4, 4,
|
||||
m[0], m[1], m[2], 0.0,
|
||||
m[3], m[4], m[5], 0.0,
|
||||
m[6], m[7], m[8], 0.0,
|
||||
0.0, 0.0, 0.0, 1.0));
|
||||
} else {
|
||||
return image.recomb(VImage::new_matrix(4, 4, m, 16));
|
||||
}
|
||||
}
|
||||
|
||||
VImage Modulate(VImage image, double const brightness, double const saturation,
|
||||
|
||||
Reference in New Issue
Block a user