//-------------------------------------------------------------------------------------- public static Bitmap ProximityPicture(Bitmap pSourcePicture, int pCountCubic) { Bitmap lTargetPicture = pSourcePicture.Clone() as Bitmap; CProximityColorData lProximityColorData = new CProximityColorData(pSourcePicture, pCountCubic); lProximityColorData.EnforceToAverage(lTargetPicture); return(lTargetPicture); }
//-------------------------------------------------------------------------------------- public static Bitmap[] CreateProjection(Bitmap pSourcePicture, int pScale) { CProximityColorData lProximityColorData = new CProximityColorData(pSourcePicture, pScale); int lNewPictureSize = pScale * 256; Bitmap lProjectionXY = new Bitmap(lNewPictureSize, lNewPictureSize); Bitmap lProjectionXZ = new Bitmap(lNewPictureSize, lNewPictureSize); Bitmap lProjectionYZ = new Bitmap(lNewPictureSize, lNewPictureSize); Color lBackColor = Color.FromArgb(255, 255, 255); Color lForeColor = Color.FromArgb(0, 0, 0); for (int i = 0; i < lNewPictureSize; i++) { for (int j = 0; j < lNewPictureSize; j++) { lProjectionXY.SetPixel(i, j, lBackColor); lProjectionXZ.SetPixel(i, j, lBackColor); lProjectionYZ.SetPixel(i, j, lBackColor); } } foreach (CProximityColorList lColorList in lProximityColorData) { int lXPos = lColorList.CubeCoordinate[0]; int lYPos = lColorList.CubeCoordinate[1]; int lZPos = lColorList.CubeCoordinate[2]; int lRadius = (Convert.ToInt32(Math.Ceiling((1.0 * pScale * lProximityColorData.MaxSize) / lColorList.Count)) - 1) / 2; //???? for (int i = lXPos * pScale - lRadius; i <= lXPos * pScale + lRadius; i++) { for (int j = lYPos * pScale - lRadius; j <= lYPos * pScale + lRadius; j++) { if (i >= 0 && j < lNewPictureSize && j >= 0 && j < lNewPictureSize) { lProjectionXY.SetPixel(i, j, lForeColor); } } } for (int i = lXPos * pScale - lRadius; i <= lXPos * pScale + lRadius; i++) { for (int j = lZPos * pScale - lRadius; j <= lZPos * pScale + lRadius; j++) { if (i >= 0 && j < lNewPictureSize && j >= 0 && j < lNewPictureSize) { lProjectionXZ.SetPixel(i, j, lForeColor); } } } for (int i = lYPos * pScale - lRadius; i <= lYPos * pScale + lRadius; i++) { for (int j = lZPos * pScale - lRadius; j <= lZPos * pScale + lRadius; j++) { if (i >= 0 && j < lNewPictureSize && j >= 0 && j < lNewPictureSize) { lProjectionYZ.SetPixel(i, j, lForeColor); } } } } return(new Bitmap[] { lProjectionXY, lProjectionXZ, lProjectionYZ }); }