public void SetPixel(int i, int j, MyColor color) { unsafe { byte *dst = (byte *)arrayPtr.ToPointer(); dst += 4 * ((Height - 1 - j) * Width + i); *dst++ = color.B; *dst++ = color.G; *dst++ = color.R; *dst++ = color.A; } }
internal void GetPixel(int i, int j, ref MyColor color) { unsafe { byte *dst = (byte *)arrayPtr.ToPointer(); dst += 4 * (j * Width + i); color.B = *dst++; color.G = *dst++; color.R = *dst++; color.A = *dst++; } }
public static MyColor WeightedColorAverage(int prevAveraged, MyColor prevAverage, MyColor toAdd) { if (prevAveraged == 0) { return(toAdd); } else { return(new MyColor( (byte)((prevAverage.R * prevAveraged + toAdd.R) / (prevAveraged + 1)), (byte)((prevAverage.G * prevAveraged + toAdd.G) / (prevAveraged + 1)), (byte)((prevAverage.B * prevAveraged + toAdd.B) / (prevAveraged + 1)))); } }
public void SetAllPixels(MyColor color) { unsafe { byte *dst = (byte *)arrayPtr.ToPointer(); for (int i = 0; i <= Width * Height; i++) { *dst++ = color.B; *dst++ = color.G; *dst++ = color.R; *dst++ = color.A; } } }
public static MyColor GetColorForHeight(float a) { int i = (int)a; if (!heightCache.TryGetValue(i, out MyColor value)) { value = new MyColor( (byte)((Math.Sin(a / 10.000) + 1.0) * 128.0), (byte)((Math.Sin(a / 30.000) + 1.0) * 128.0), (byte)((Math.Sin(a / 70.000) + 1.0) * 128.0)); heightCache.Add(i, value); } ; return(value); }
public void DrawAt(DirectBitmap chunkBmp, int tileX, int tileY, int numX, int numY) { MyDColor[][] tmpC = new MyDColor[Height / numY][]; int[][] tmpN = new int[tmpC.Length][]; for (int j = 0; j < Height / numY; j++) { tmpC[j] = new MyDColor[Width / numX]; tmpN[j] = new int[tmpC[j].Length]; } MyColor tmp2 = new MyColor(); unsafe { byte *dst = (byte *)chunkBmp.arrayPtr.ToPointer(); for (int j = 0; j < chunkBmp.Height; j++) { int jP = j * tmpC.Length / chunkBmp.Height; for (int i = 0; i < chunkBmp.Width; i++) { int iP = i * tmpC[jP].Length / chunkBmp.Width; tmp2.B = *dst++; tmp2.G = *dst++; tmp2.R = *dst++; tmp2.A = *dst++; Utils.WeightedColorAverage(ref tmpN[jP][iP], ref tmpC[jP][iP], ref tmp2); } } } int v0 = (numX - 1 - tileX) * Width / numX; int v1 = tileY * Height / numY; for (int j = 0; j < Height / numY; j++) { for (int i = 0; i < Width / numX; i++) { int iP = i; int jP = (Height / numY - 1 - j); this.SetPixel(iP + v0, jP + v1, tmpC[j][i].ToMyColor()); } } }
public static void WeightedColorAverage(ref int prevAveraged, ref MyDColor average, ref MyColor toAdd) { average.R = (average.R * prevAveraged + toAdd.R) / (prevAveraged + 1); average.G = (average.G * prevAveraged + toAdd.G) / (prevAveraged + 1); average.B = (average.B * prevAveraged + toAdd.B) / (prevAveraged + 1); prevAveraged += 1; }