public static Texture2D pick(int[,] pPatternMark,int pPickPatternID, Texture2D pSource, zzPointBounds pBounds, zzPoint pOutSize) { Texture2D lOut = new Texture2D(pOutSize.x, pOutSize.y, TextureFormat.ARGB32, false); var lMin = pBounds.min; var lMax = pBounds.max; var lDrawOffset = -lMin; for (int lY = lMin.y; lY < lMax.y; ++lY) { var lDrawedPointY = lY + lDrawOffset.y; for (int lX = lMin.x; lX < lMax.x; ++lX) { var lColor = pPatternMark[lX, lY] == pPickPatternID ? pSource.GetPixel(lX, lY) : Color.clear; lOut.SetPixel(lX + lDrawOffset.x, lDrawedPointY, lColor); } for (int i = lMax.x+lDrawOffset.x; i < lOut.width; ++i) { lOut.SetPixel(i, lDrawedPointY, Color.clear); } } for (int lY = lMax.y + lDrawOffset.y; lY < lOut.height; ++lY) { for (int lX = 0; lX < lOut.width; ++lX) lOut.SetPixel(lX, lY, Color.clear); } lOut.Apply(); return lOut; }
public override void sweepPicture() { pointNumber = 0; polygonNumber = 0; holeNumber = 0; var lPatternResult = zzOutlineSweeper.sweeper(activeChart); imagePatterns = new Texture2D[lPatternResult.Count]; imagePatternBounds = new zzPointBounds[lPatternResult.Count]; //拾取图块 for (int i = 0; i < lPatternResult.Count; ++i) { zzPointBounds lBounds = lPatternResult.sweeperPointResults[i].Bounds; imagePatternBounds[i] = lBounds; var lBoundMin = lBounds.min; var lBoundMax = lBounds.max; zzPoint lPatternSize = new zzPoint( Mathf.NextPowerOfTwo(lBoundMax.x - lBoundMin.x + 1), Mathf.NextPowerOfTwo(lBoundMax.y - lBoundMin.y + 1) ); imagePatterns[i] = zzImagePatternPicker.pick(lPatternResult.patternMark, i + 1, picture, lBounds, lPatternSize); } //var lSweeperResults = zzOutlineSweeper.sweeper(activeChart, ignoreDistanceInSweeping); var lSweeperResults = zzOutlineSweeper .simplifySweeperResult(lPatternResult.sweeperPointResults, ignoreDistanceInSweeping); modelsSize = new Vector2((float)activeChart.width, (float)activeChart.height); //存储结果 concaves = new List<zz2DConcave>(); var lNewImagePatterns =new List<Texture2D>(lPatternResult.Count); var lNewPatternBounds = new List<zzPointBounds>(lPatternResult.Count); for (int i = 0; i < lSweeperResults.Count; ++i) { var lSweeperResult = lSweeperResults[i]; var lImage = imagePatterns[i]; if (lSweeperResult.edge.Length < 2 || lImage.width < 3 || lImage.height<3) continue; lNewImagePatterns.Add(lImage); lNewPatternBounds.Add(imagePatternBounds[i]); zzSimplyPolygon lPolygon = new zzSimplyPolygon(); lPolygon.setShape(lSweeperResult.edge); zz2DConcave lConcave = new zz2DConcave(); lConcave.setShape(lPolygon); ++polygonNumber; foreach (var lHole in lSweeperResult.holes) { if (lHole.Length < 2) continue; zzSimplyPolygon lHolePolygon = new zzSimplyPolygon(); lHolePolygon.setShape(lHole); lConcave.addHole(lHolePolygon); ++holeNumber; } concaves.Add(lConcave); } imagePatterns = lNewImagePatterns.ToArray(); imagePatternBounds = lNewPatternBounds.ToArray(); }
public zzPointBounds(zzPointBounds other) { mMin = other.mMin; mMax = other.mMax; }