程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 超酷的圖像效果 (附demo; C#完成)(8)

超酷的圖像效果 (附demo; C#完成)(8)

編輯:關於C語言

八.百葉窗效果

原理:(1).垂直百葉窗效果:

根據窗口或圖像的高度或寬度和定制的百葉窗顯示條寬度計算百葉窗顯示的條數量;

根據窗口或圖像的高度或寬度定制百葉窗顯示條數量計算百窗顯示的條寬度.

(2).水平百葉窗效果: 原理同上,只是繪制像素點開始的坐標不同.

效果圖:

  

實現代碼:

垂直百葉窗
    private void button1_Click(object sender, EventArgs e)
    {
      //垂直百葉窗顯示圖像
      try
      {
        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(100);
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "信息提示");
      }
    }
  
水平百葉窗
private void button3_Click(object sender, EventArgs e)
    {
      //水平百葉窗顯示圖像
      try
      {
        MyBitmap = (Bitmap)this.pictureBox1.Image.Clone();
        int dh = MyBitmap.Height / 20;
        int dw = MyBitmap.Width;
        Graphics g = this.pictureBox1.CreateGraphics();
        g.Clear(Color.Gray);
        Point[] MyPoint = new Point[20];
        for (int y = 0; y < 20; y++)
        {
          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(100);
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "信息提示");
      }
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved