- avgcolor[0] = 0;
- avgcolor[1] = 0;
- avgcolor[2] = 0;
- avgcolor[3] = 0;
- avgcolor[4] = 0;
- wsum = 0;
- for(j = 0; j < basepixels_width * basepixels_height * 4; j += 4)
- {
- w = (int)basepixels[j + 0] + (int)basepixels[j + 1] + (int)basepixels[j + 2]; // use this weight, so black pixels don't contribute (needed for model skins)
- avgcolor[2] += basepixels[j + 0] * w;
- avgcolor[1] += basepixels[j + 1] * w;
- avgcolor[0] += basepixels[j + 2] * w;
- avgcolor[3] += basepixels[j + 3] * w;
- avgcolor[4] += basepixels[j + 3];
- wsum += w;
- }
- if(avgcolor[3] == 0) // just fully transparent pixels seen? bad luck...
- avgcolor[3] = 255.0 * wsum;
- if(avgcolor[3] == 0) // no pixels seen? even worse
- avgcolor[3] = 1;
- avgcolor[0] /= avgcolor[3];
- avgcolor[1] /= avgcolor[3];
- avgcolor[2] /= avgcolor[3];
- avgcolor[3] /= 255.0 * wsum; // to 0..1 range
- skinframe->avgcolor[0] = avgcolor[0];
- skinframe->avgcolor[1] = avgcolor[1];
- skinframe->avgcolor[2] = avgcolor[2];
- skinframe->avgcolor[3] = avgcolor[4] / (basepixels_width * 255.0 * basepixels_height);