1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| image image_filter_rect_aux2 (image* I, int x1, int y1, int x2, int y2, int* K, int kCols, int kRows, int divisor)
{
int kCenterX = kCols / 2;
int kCenterY = kRows / 2;
int i, j, m, mm, n, nn, ii, jj;
image J = image_create ((*I)->w, (*I)->h, 0xffffffff);
for(j = y1 + 1 ; j < y2 - 1 ; j++)
{
for(i = x1 + 1; i < x2 - 1 ; i++)
{
byte r=0;
byte g=0;
byte b=0;
for(m=0; m < kRows; m++)
{
mm = kRows - 1 - m;
for(n=0; n < kCols; n++)
{
ii = i + (m - kCenterX);/*changer le i + et le j + en i - et en j - pour changer impression de relief*/
jj = j - (n - kCenterY);
if( ii >= 0 && ii < (*I)->w && jj >= 0 && jj < (*I)->h )
{
byte rr, gg, bb;
nn = kCols + 1 + n;
colour_get_rgb ((*I)->pixel [jj * (*I)->w + ii] , &rr, &gg, &bb);
r += (rr * (K[mm * kRows + nn])) / divisor ;
g += (gg * (K[mm * kRows + nn])) / divisor;
b += (bb * (K[mm * kRows + nn])) / divisor;
image_putpixel (J, i, j, make_colour(r, g, b, 0xff));
}
}
}
}
}
for (j = 0; j < J->h; j++)
{
for (i = 0; i < J->w; i++)
{
byte a, b, c;
colour_get_rgb (J->pixel[j * J->w + i], &a, &b, &c);
J->pixel[j * J->w + i] = make_colour (255-a, 255-b, 255-c, 0xff);
}
}
/*
for (j = 0; j < J->h; j++)
{
for (i = 0; i < J->w; i++)
{
byte a, b, c;
colour_get_rgb (J->pixel[j * J->w + i], &a, &b, &c);
if (J->pixel[j * J->w + i] == 0xffffffff)
J->pixel[j * J->w + i] = make_colour (180, 180, 180, 0xff);
}
}
*/
return J;
} |
Partager