先在panel容器(長寬為300)中繪制一個宮格,比如下面這樣:
PRivate void Form1_Load(object sender, EventArgs e) { this.InitRandomPictureBox(); } private void InitRandomPictureBox() { this.pnl_Random.Controls.Clear(); for (int i = 0; i < this.ImgNumbers; i++) { for (int j = 0; j < this.ImgNumbers; j++) { PictureBox pic = new PictureBox(); pic.Location = new Point(j * this.SideLength, i * this.SideLength); pic.Size = new Size(this.SideLength, this.SideLength); pic.Visible = true; pic.BorderStyle = BorderStyle.FixedSingle; this.pnl_Random.Controls.Add(pic); } } }/// <summary> /// 每個方向上要切割成的塊數 /// </summary> private int ImgNumbers { get { return 3; } } /// <summary> /// 要切割成的正方形圖片邊長 /// </summary> private int SideLength { get { return 300 / this.ImgNumbers; //300:panel容器大小 } }//圖片切割:/// <summary> /// 將圖片切割成小圖片,圖片順序為先水平后垂直 /// </summary> /// <param name="cx">水平方向多少個圖片</param> ///<param name="cy">垂直方向多少個圖片</param> public static Image[] SplitToSmallImages(this Image fromImage, int cx, int cy) { Image[] imgs = new Image[cx * cy]; int nWidth = fromImage.Width / cx; int nHeight = fromImage.Height / cy; Bitmap image = new Bitmap(nWidth, nHeight); Graphics graphics = Graphics.FromImage(image); for (int i = 0; i < cy; i++) { for (int j = 0; j < cx; j++) { graphics.DrawImage(fromImage, 0, 0, new Rectangle(j * nWidth, i * nHeight, nWidth, nHeight), GraphicsUnit.Pixel); Image img = Image.FromHbitmap(image.GetHbitmap()); int idx = j + i * cx; img.Tag = idx; imgs[idx] = img; } } return imgs; }將切好的圖片隨機排序然后放入到容器中:var tmp = this._splitImages.OrderBy(p => Guid.NewGuid()).ToList(); for (int i = 0; i < tmp.Count; i++) { this._splitPictureBoxes[i].Image = tmp[i]; }
新聞熱點
疑難解答