01.百味窗图像动画效果
Bitmap对象的GetPixel()方法的应用
Bitmap对象的SetPixel()方法的应用
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = //设置打开图像的类型
"*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
this.openFileDialog1.ShowDialog(); //打开对话框
if (this.openFileDialog1.FileName.Trim() == "")
return;
try
{
Bitmap SrcBitmap = new Bitmap(this.openFileDialog1.FileName); //把打开的图像赋给Bitmap变量
MyBitmap = new Bitmap(SrcBitmap, this.pictureBox1.Width, this.pictureBox1.Height);
this.pictureBox1.Image = MyBitmap; //在控件上显示图像
}
catch (Exception Err)
{
MessageBox.Show(this, "打开图像文件错误!", "信息提示", //提示对话框
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void button2_Click(object sender, EventArgs e)
{
MyBitmap = (Bitmap)this.pictureBox1.Image.Clone(); //为公用变量MyBitmap赋值
int dh = MyBitmap.Height / 20; //定义变量并赋值
int dw = MyBitmap.Width;
Graphics g = this.pictureBox1.CreateGraphics(); //定义Graphics对象案例
g.Clear(Color.Gray);
Point[] MyPoint = new Point[20]; //定义点数组
for (int y = 0; y < 20; y++) //利用For循环为点数组赋值
{
MyPoint[y].X = 0;
MyPoint[y].Y = y * dh;
}
Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height);
for (int i = 0; i < dh; i++)
{
for (int j = 0; j < 20; j++)
{
for (int k = 0; k < dw; k++)
{
bitmap.SetPixel(MyPoint[j].X + k, MyPoint[j].Y + i, MyBitmap.GetPixel(MyPoint[j].X + k, MyPoint[j].Y + i));
}
}
this.pictureBox1.Refresh(); //刷新图像
this.pictureBox1.Image = bitmap;
System.Threading.Thread.Sleep(10);
}
}
private void button3_Click(object sender, EventArgs e)
{
MyBitmap = (Bitmap)this.pictureBox1.Image.Clone();
int dw = MyBitmap.Width / 30;
int dh = MyBitmap.Height;
Graphics g = this.pictureBox1.CreateGraphics();
g.Clear(Color.Gray);
Point[] MyPoint = new Point[30];
for (int x = 0; x < 30; x++)
{
MyPoint[x].Y = 0;
MyPoint[x].X = x * dw;
}
Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height);
for(int i=0;i<dw;i++)
{
for(int j=0;j<30;j++)
{
for(int k=0;k<dh;k++)
{
bitmap.SetPixel(MyPoint[j].X+i,MyPoint[j].Y+k,MyBitmap.GetPixel(MyPoint[j].X+i,MyPoint[j].Y+k));
}
}
this.pictureBox1.Refresh();
this.pictureBox1.Image=bitmap;
System.Threading.Thread.Sleep(10);
}
}
private void button4_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
02.翻转和扩展图像动画效果
MessageBox.Show()方法的应用
Graphics对象的DrawImage()方法的应用
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = //设置打开图像的类型
"*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
this.openFileDialog1.ShowDialog(); //打开对话框
if (this.openFileDialog1.FileName.Trim() == "")
return;
try
{
Bitmap SrcBitmap = new Bitmap(this.openFileDialog1.FileName); //把打开的图像赋给Bitmap变量
MyBitmap = new Bitmap(SrcBitmap, this.pictureBox1.Width, this.pictureBox1.Height);
this.pictureBox1.Image = MyBitmap; //在控件上显示图像
}
catch (Exception Err)
{
MessageBox.Show(this, "打开图像文件错误!", "信息提示", //提示对话框
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void button2_Click(object sender, EventArgs e)
{
int iWidth = this.pictureBox1.Width; //图像宽度
int iHeight = this.pictureBox1.Height; //图像高度
Graphics g = this.pictureBox1.CreateGraphics(); //创建Graphics对象实例
g.Clear(Color.Gray); //初始为全灰色
for (int x = -iWidth / 2; x <= iWidth / 2; x++) //翻转图像
{
Rectangle DestRect = new Rectangle(0, iHeight / 2 - x, iWidth, 2 * x);
Rectangle SrcRect = new Rectangle(0, 0, MyBitmap.Width, MyBitmap.Height);
g.DrawImage(MyBitmap, DestRect, SrcRect, GraphicsUnit.Pixel);
System.Threading.Thread.Sleep(10);
}
}
private void button3_Click(object sender, EventArgs e)
{
int iWidth = this.pictureBox1.Width; //图像宽度
int iHeight = this.pictureBox1.Height; //图像高度
Graphics g = this.pictureBox1.CreateGraphics(); //创建Graphics对象实例
g.Clear(Color.Gray); //初始为全灰色
for (int x = 0; x <= iWidth / 2; x++) //扩展图像
{
Rectangle DestRect = new Rectangle(iWidth / 2 - x, iHeight / 2 - x, 2 * x, 2 * x);
Rectangle SrcRect = new Rectangle(0, 0, MyBitmap.Width, MyBitmap.Height);
g.DrawImage(MyBitmap, DestRect, SrcRect, GraphicsUnit.Pixel);
System.Threading.Thread.Sleep(10);
}
}
private void button4_Click(object sender, EventArgs e)
{
this.Close();
}
03.图像的纹理和浮雕效果
Bitmap对象的GetPixel()方法的应用
Bitmap对象的SetPixel()方法的应用
BitmapData对象的Scan0属性
Bitmap对象的LockBits()方法,语法结构:
public System.Drawing.Imaging.BitmapData LockBits(
System.Drawing.Rectangle rect,
System.Drawing.Imaging.ImageLockMode flags,
System.Drawing.Imaging.PixelFormat format,
System.Drawing.Imaging.BitmapData bitmapData)
参数意义:
rect:矩形结构,它指定要锁定的System.Drawing.Bitmap的部分。
flags:指定System.Drawing.Bitmap的访问级别(读/写)。
format:一个PixelFormat值,它指示System.Drawing.Bitmap的数据格式。
bitmapData:包含有关锁定操作的信息。
System.Runtime.InteropServices.Marshal类的Copy()方法。
public static void Copy(byte[] source,int startIndex,System.IntPtr destination,int length)
参数意义:
source从中进行复制的一维数据。
startIndex:数据中复制(Copy)开始位置的从0开始的索引。
destination:要复制的内存指针。
length:要复制的数组元素的数目。
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = //设置打开图像的类型
"*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
this.openFileDialog1.ShowDialog(); //打开对话框
if (this.openFileDialog1.FileName.Trim() == "")
return;
try
{
Bitmap SrcBitmap = new Bitmap(this.openFileDialog1.FileName); //把打开的图像赋给Bitmap变量
Mybitmap = new Bitmap(SrcBitmap, this.pictureBox1.Width, this.pictureBox1.Height);
this.pictureBox1.Image = Mybitmap; //在控件上显示图像
}
catch
{
MessageBox.Show(this, "打开图像文件错误!", "信息提示", //提示对话框
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void button2_Click(object sender, EventArgs e)
{
Image myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);
Mybitmap = new Bitmap(myImage);
Rectangle rect = new Rectangle(0, 0, Mybitmap.Width, Mybitmap.Height);
//将指定图像锁定到内存中
System.Drawing.Imaging.BitmapData bmpData=Mybitmap.LockBits(rect,
System.Drawing.Imaging.ImageLockMode.ReadWrite,Mybitmap.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = Mybitmap.Width * Mybitmap.Height * 3;
byte[] rgbValues = new byte[bytes];
//使用RGB值为声明的rgbValues数组赋值
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
for (int counter = 0; counter < rgbValues.Length; counter += 3)
rgbValues[counter] = 125;
//使用RGB值为图像的像素点着色
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
//从内存中解锁图像
Mybitmap.UnlockBits(bmpData);
this.pictureBox1.Image = Mybitmap;
}
private void button3_Click(object sender, EventArgs e)
{
Image myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);
Bitmap myBitmap = new Bitmap(myImage); //创建Bitmap对象实例
for (int i = 0; i < myBitmap.Width - 1; i++)
{
for (int j = 0; j < myBitmap.Height - 1; j++)
{
Color Color1 = myBitmap.GetPixel(i, j); //调用GetPixel方法获取像素点的颜色
Color Color2 = myBitmap.GetPixel(i + 1, j + 1);
int red = Math.Abs(Color1.R - Color2.R + 128); //调用绝对值Abs函数
int green = Math.Abs(Color1.G - Color2.G + 128);
int blue = Math.Abs(Color1.B - Color2.B + 128);
//颜色处理
if (red > 255) red = 255;
if (red < 0) red = 0;
if (green > 255) green = 255;
if (green < 0) green = 0;
if (blue > 255) blue = 255;
if (blue < 0) blue = 0;
myBitmap.SetPixel(i, j, Color.FromArgb(red, green, blue)); //用SetPixel()方法设置像素点的颜色
}
}
this.pictureBox1.Image = myBitmap;
}
private void button4_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
04.图像的马赛克效果
Bitmap对象的SetPixel()方法的应用
随机函数Random的应用
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = //设置打开图像的类型
"*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf";
this.openFileDialog1.ShowDialog(); //打开对话框
if (this.openFileDialog1.FileName.Trim() == "")
return;
try
{
Bitmap SrcBitmap = new Bitmap(this.openFileDialog1.FileName); //把打开的图像赋给Bitmap变量
Mybitmap = new Bitmap(SrcBitmap, this.pictureBox1.Width, this.pictureBox1.Height);
this.pictureBox1.Image = Mybitmap; //在控件上显示图像
}
catch
{
MessageBox.Show(this, "打开图像文件错误!", "信息提示", //提示对话框
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void button2_Click(object sender, EventArgs e)
{
Image myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);
Mybitmap = new Bitmap(myImage); //创建Bitmap对象实例
int intWidth = Mybitmap.Width / 10; //定义变量并赋值
int intHeight = Mybitmap.Height / 10;
Graphics myGraphics = this.CreateGraphics();
myGraphics.Clear(Color.WhiteSmoke);
Point[] myPoint = new Point[100]; //定义点数组
for (int i = 0; i <10; i++) //利用双For循环语句为点数组赋值
{
for (int j = 0; j < 10; j++)
{
myPoint[i * 10 + j].X = i * intWidth;
myPoint[i * 10 + j].Y = j * intHeight;
}
}
Bitmap bitmap = new Bitmap(Mybitmap.Width, Mybitmap.Height);
for (int i = 0; i < 100; i++)
{
Random rand = new Random(); //随机函数
int intPos = rand.Next(100);
for (int m = 0; m < intWidth; m++)
{
for (int n = 0; n < intHeight; n++)
{
bitmap.SetPixel(myPoint[intPos].X + m, myPoint[intPos].Y + n,
Mybitmap.GetPixel(myPoint[intPos].X + m, myPoint[intPos].Y + n));
}
}
this.Refresh(); //刷新程序
this.pictureBox1.Image = bitmap;
}
for (int k = 0; k < 100; k++)
{
for (int m = 0; m < intWidth; m++)
{
for (int n = 0; n < intHeight; n++)
{
bitmap.SetPixel(myPoint[k].X + m, myPoint[k].Y + n, //调用SetPixel方法
Mybitmap.GetPixel(myPoint[k].X + m, myPoint[k].Y + n));
}
}
this.Refresh();
this.pictureBox1.Image = bitmap; //在PictureBox控件上显示图像
}
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
窗体界面设计(完)
心得:c#界面功能强大,窗体界面易变形,展示效果突出。基本语法得定期练习,窗体的把握准确度有待提高。