Пример #1
0
static int draw(RGB32 *src, RGB32 *dest)
{
	int x, y;
	unsigned char *p, *q, v;
	unsigned char sum, sum1, sum2, sum3;
	int width;
	RGB32 pix;

	width = video_width;

	p = image_diff_filter(image_bgsubtract_update_y(src));
	for(x=0; x<video_area; x++) {
		field1[x] |= p[x];
	}

	p = field1 + 1;
	q = field2 + width + 1;
	dest += width + 1;
	src += width + 1;
/* each value of cell is 0 or 0xff. 0xff can be treated as -1, so
 * following equations treat each value as negative number. */
	for(y=1; y<video_height-1; y++) {
		sum1 = 0;
		sum2 = p[0] + p[width] + p[width*2];
		for(x=1; x<width-1; x++) {
			sum3 = p[1] + p[width+1] + p[width*2+1];
			sum = sum1 + sum2 + sum3;
			v = 0 - ((sum==0xfd)|((p[width]!=0)&(sum==0xfc)));
			*q++ = v;
			pix = (signed char)v;
//			pix = pix >> 8;
			*dest++ = pix | *src++;
			sum1 = sum2;
			sum2 = sum3;
			p++;
		}
		p += 2;
		q += 2;
		src += 2;
		dest += 2;
	}
	p = field1;
	field1 = field2;
	field2 = p;

	return 0;
}
Пример #2
0
static int draw(RGB32 *src, RGB32 *dest)
{
	int x, y;
	unsigned char *diff;

	if(!bgIsSet) {
		setBackground(src);
	}

	diff = image_diff_filter(image_bgsubtract_y(src));
	for(y=video_height; y>0; y--) {
		for(x=video_width; x>0; x--) {
			if(*diff++) {
				*dest = 0 - ((inline_fastrand()>>31) & y);
			} else {
				*dest = *src;
			}
			src++;
			dest++;
		}