1 private void TintThePicture(int deg) {
2 int[] pix = new int[picw * pich];
3 mBitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);
4
5 int RY, GY, BY, RYY, GYY, BYY, R, G, B, Y;
6 double angle = (3.14159d * (double)deg) / 180.0d;
7 int S = (int)(256.0d * Math.sin(angle));
8 int C = (int)(256.0d * Math.cos(angle));
9
10 for (int y = 0; y < pich; y++)
11 for (int x = 0; x < picw; x++)
12 {
13 int index = y * picw + x;
14 int r = (pix[index] >> 16) & 0xff;
15 int g = (pix[index] >> 8) & 0xff;
16 int b = pix[index] & 0xff;
17 RY = ( 70 * r - 59 * g - 11 * b) / 100;
18 GY = (-30 * r + 41 * g - 11 * b) / 100;
19 BY = (-30 * r - 59 * g + 89 * b) / 100;
20 Y = ( 30 * r + 59 * g + 11 * b) / 100;
21 RYY = (S * BY + C * RY) / 256;
22 BYY = (C * BY - S * RY) / 256;
23 GYY = (-51 * RYY - 19 * BYY) / 100;
24 R = Y + RYY;
25 R = (R < 0) ? 0 : ((R > 255) ? 255 : R);
26 G = Y + GYY;
27 G = (G < 0) ? 0 : ((G > 255) ? 255 : G);
28 B = Y + BYY;
29 B = (B < 0) ? 0 : ((B > 255) ? 255 : B);
30 pix[index] = 0xff000000 | (R << 16) | (G << 8) | B;
31 }
32
33 Bitmap bm = Bitmap.createBitmap(picw, pich, false);
34 bm.setPixels(pix, 0, picw, 0, 0, picw, pich);
35
36 // Put the updated bitmap into the main view
37 mIV.setImageBitmap(bm);
38 mIV.invalidate();
39
40 mBitmap = bm;
41 pix = null;
42 }