티스토리 뷰

my Programing/etc..

MotionBlur

Gandawon 2009. 9. 11. 14:22
public static bool MotionBlur(ref Bitmap bmp, int range, double angle)
{
	if (bmp.PixelFormat != PixelFormat.Format24bppRgb)
		return false;
	if (range < 2) return false;
	int w = bmp.Width;
	int h = bmp.Height;
	angle += 180;
	double sn = Math.Sin(angle * Math.PI / 180d);
	double cs = Math.Cos(angle * Math.PI / 180d);
	int[] dx = new int[range];
	int[] dy = new int[range];
	for (int i = 0; i < range; i++)
	{
		dx[i] = (int)(cs * (i + 1) + 0.5d);
		dy[i] = (int)(sn * (i + 1) + 0.5d);
	}
	int xx, yy, rr, gg, bb, count;
	Bitmap tmp = bmp.Clone() as Bitmap;
	BmpProc24 src = new BmpProc24(tmp);
	BmpProc24 dst = new BmpProc24(bmp);
	for (int y = 0; y < h; y++)
	{
		for (int x = 0; x < w; x++)
		{
			src.SetXY(x, y);
			rr = src.R;
			gg = src.G;
			bb = src.B;
			count = 1;
			for (int i = 1; i <= range; i++)
			{
				xx = x + dx[i - 1];
				yy = y + dy[i - 1];
				if ((xx < 0) | (xx > w - 1) | (yy < 0) | (yy > h - 1))
				{
					continue;
				}
				src.SetXY(xx, yy);
				rr += src.R;
				gg += src.G;
				bb += src.B;
				count++;
			}
			dst.SetXY(x, y);
			dst.R = (byte)(rr / count);
			dst.G = (byte)(gg / count);
			dst.B = (byte)(bb / count);
		}
	ImgUtils.CallDispose(dst, src, tmp);
	return true;
}

'my Programing > etc..' 카테고리의 다른 글

Tistory 에 SyntaxHighlighter 적용하기  (1) 2010.01.28
완성형 코드 표  (7) 2009.09.18
오늘의 작업물..  (0) 2009.08.28
#pragma 키워드  (0) 2009.04.22
ARM 컴파일러로 컴파일시의 에러/경고  (0) 2009.04.10
댓글