private void Redraw() { Dictionary <double, int> dict = new Dictionary <double, int>(); bmp.LockBitmap(); //bmp.Clear(ColorFilter.white); bmp.Clear(ColorFilter.black); for (int y = 1; y < gridHeight; y++) { double xUnitSize = gridWidth / (double)y; int totalSlots = y; for (int x = 0; x < totalSlots; x++) { PixelData pd = new PixelData(0xFF, 0xFF, 0xFF); colorFilter.GetColor(xUnitSize, x, totalSlots, ref pd); int xp = (int)Math.Round(x * xUnitSize); bmp.SetPixel(xp, y, pd); //double gridX =Math.Round(x * ratio * 10); //if (!dict.ContainsKey(gridX))// && dict.Count < colors.Count) //{ // dict.Add(gridX, dict.Count); // isNew = true; //} //int slot = 1; //double left = y - x; //int b = left % 8 != slot ? 255 : 0; //int r = x % 8 != slot ? 255 : 0; //int g = x % 32 != slot ? (left % 32 != slot ? 255 : 0) : 0; //pd = new PixelData(r, g, b); } } bmp.UnlockBitmap(); bmp.Bitmap.Save("test.png"); }
public override void GetColor(double xUnitSize, int xSlot, int xTotalSlots, ref PixelData pd) { double x = xSlot * xUnitSize; //double above = sortedSet.Where(val => val >= x).FirstOrDefault(); //double below = sortedSet.Where(val => val < x).FirstOrDefault(); //double difAbove = Math.Abs(above - x); //double difBelow = Math.Abs(below - x); //double minDif = Math.Min(difAbove, difBelow); int pixelX = (int)x; bool isNew = !set.ContainsKey(pixelX); if (isNew) { set.Add(pixelX, 1); } else { int count = set[pixelX]; set[pixelX] = count + 1; int difVal = (int)(Math.Abs((int)x - x) * 256); int g = (int)(xTotalSlots / (double)count * 0x80) % 0xFF; pd.ChangeTo(difVal, (int)(difVal / 2.0), (int)(g * 0.7)); } }
public void ChangeTo(PixelData pd) { this.red = pd.red; this.green = pd.green; this.blue = pd.blue; }
public virtual void GetColor(double xUnitSize, int xSlot, int xTotalSlots, ref PixelData pd) { }
public void SetPixel(int x, int y, PixelData color) { PixelData *pixel = PixelAt(x, y); *pixel = color; }
public PixelData GetPixel(int x, int y) { PixelData returnValue = *PixelAt(x, y); return(returnValue); }