Beispiel #1
0
 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;
     }
 }
Beispiel #2
0
 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++;
     }
 }
Beispiel #3
0
 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))));
     }
 }
Beispiel #4
0
 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;
         }
     }
 }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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());
                }
            }
        }
Beispiel #7
0
 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;
 }