//-------------------------------------------------------------------------------------- /// <summary> /// разбиение рисунка на части - по одной для каждого цвета /// </summary> /// <param name="pPicture">входной рисунок для разбиения</param> /// <returns>выходной список рисунков - в каждом только один цвет</returns> public Dictionary <Color, Bitmap> SplitImageByColor(Bitmap pPicture) { Dictionary <Color, Bitmap> lOutList = new Dictionary <Color, Bitmap>(); for (int i = 0; i < pPicture.Width; i++) { for (int j = 0; j < pPicture.Height; j++) { Color lColor = pPicture.GetPixel(i, j); if (!lOutList.ContainsKey(lColor)) { Color lBackColor = CImageSplitter.DefineBestBackColor(lColor); Bitmap lNewPicture = new Bitmap(pPicture.Width, pPicture.Height); lOutList.Add(lColor, lNewPicture); for (int l = 0; l < lNewPicture.Width; l++) { for (int k = 0; k < lNewPicture.Height; k++) { lNewPicture.SetPixel(l, k, lBackColor); } } } lOutList[lColor].SetPixel(i, j, lColor); } } return(lOutList); }
//-------------------------------------------------------------------------------------- public FBordersByColorForImage(Image pImage) { InitializeComponent(); fSourceBitmap = pImage as Bitmap; if (fSourceBitmap != null) { pbSourceImage.Image = fSourceBitmap; } fBlackWhiteExplorer = new CBlackWhiteExplorer(); Color[] lFinalColors = CBlackWhiteExplorer.DefineExactNeedColor(8); fColorsOfVariant = new Color[8]; fTextOfColors = new string[8]; for (int i = 0; i < 6; i++) { fColorsOfVariant[i + 1] = lFinalColors[i]; } fColorsOfVariant[0] = Color.FromArgb(255, 0, 0, 0); fColorsOfVariant[7] = Color.FromArgb(255, 255, 255, 255); for (int i = 0; i < fTextOfColors.Length; i++) { fTextOfColors[i] = fColorsOfVariant[i].R.ToString() + ":" + fColorsOfVariant[i].G.ToString() + ":" + fColorsOfVariant[i].B.ToString(); } l000.Text += " (" + fTextOfColors[0] + ")"; l001.Text += " (" + fTextOfColors[1] + ")"; l010.Text += " (" + fTextOfColors[2] + ")"; l011.Text += " (" + fTextOfColors[3] + ")"; l100.Text += " (" + fTextOfColors[4] + ")"; l101.Text += " (" + fTextOfColors[5] + ")"; l110.Text += " (" + fTextOfColors[6] + ")"; l111.Text += " (" + fTextOfColors[7] + ")"; l000.BackColor = fColorsOfVariant[0]; l001.BackColor = fColorsOfVariant[1]; l010.BackColor = fColorsOfVariant[2]; l011.BackColor = fColorsOfVariant[3]; l100.BackColor = fColorsOfVariant[4]; l101.BackColor = fColorsOfVariant[5]; l110.BackColor = fColorsOfVariant[6]; l111.BackColor = fColorsOfVariant[7]; l000.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[0]); l001.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[1]); l010.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[2]); l011.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[3]); l100.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[4]); l101.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[5]); l110.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[6]); l111.ForeColor = CImageSplitter.DefineBestBackColor(fColorsOfVariant[7]); fBordersByColorForImage = new CBordersByColorForImage(fSourceBitmap); }