图像的特效显示就是利用人眼的视觉特性, 通过对图像分块, 然后以不同的次序显示出来。实现图像的特效显示的基本思路是将图像分成不同的小块, 按一定的方向或次序、分阶 段地显示或擦除图像块。其中的 4 个要点是:
(1 ) 如何划分图像块;
(2 ) 确定图像块的操作次序;
(3 ) 显示或清除图像块;
(4 ) 在两个图像块的操作之间延时
向下扫描
int h = curBitmap.Height;
int w = curBitmap.Width;
Bitmap bitmap = new Bitmap(curBitmap.Width, curBitmap.Height);
for (int i = 0; i < h; i++)
{
for (int k = 0; k < w; k++)
{
bitmap.SetPixel(k, i, curBitmap.GetPixel(k, i));
}
this.pb2.Refresh();
this.pb2.Image = bitmap;
Thread.Sleep(5);
}
从左扫描
int h = curBitmap.Height;
int w = curBitmap.Width;
Bitmap bitmap = new Bitmap(curBitmap.Width, curBitmap.Height);
for (int i = 0; i < w; i++)
{
for (int k = 0; k < h; k++)
{
bitmap.SetPixel(i, k, curBitmap.GetPixel(i, k));
}
this.pb2.Refresh();
this.pb2.Image = bitmap;
Thread.Sleep(5);
}
垂直百叶窗
int h = curBitmap.Height;
int w = curBitmap.Width;
int dh = h / 10;
Bitmap bitmap = new Bitmap(curBitmap.Width, curBitmap.Height);
Point[] myPoints = new Point[10];
for (int i = 0; i < 10; i++)
{
myPoints[i].X = 0;
myPoints[i].Y = i * dh;
}
for (int i = 0; i < dh; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < w; k++)
{
int x = myPoints[j].X + k;
int y = myPoints[j].Y + i;
Color cr = curBitmap.GetPixel(x ,y );
bitmap.SetPixel(x, y, cr);
}
}
this.pb2.Refresh();
this.pb2.Image = bitmap;
Thread.Sleep(5);
}
马赛克
Random ra=new Random();
//for (int i = 0; i < 2; i++)
//{
for (int j = 0; j < ltileNum; j++)
{
int n = ra.Next(0, ltileNum);
int x = myPoints[n].X ;
int y = myPoints[n].Y ;
for (int k = 0; k <num; k++)
{
for (int l = 0; l <num; l++)
{
if (x + k < w && y + l<h)
{
Color cr = curBitmap.GetPixel(x + k, y + l);
bitmap.SetPixel(x + k, y + l, cr);
}
}
}
//}
}
this.pb2.Refresh();
this.pb2.Image = bitmap;
Thread.Sleep(1);