Files
        @ e4628e1c4408
    
        
              Branch filter: 
        
    Location: ATITD-Tools/Desert-Paint-Codex/Util/Pixels.cs - annotation
        
            
            e4628e1c4408
            2.4 KiB
            text/x-csharp
        
        
    
    Update to .NET 7
    | 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 de6e00728a10 40eaee10ae56 40eaee10ae56 de6e00728a10 40eaee10ae56 de6e00728a10 de6e00728a10 de6e00728a10 de6e00728a10 de6e00728a10 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 40eaee10ae56 | using System;
using System.Diagnostics;
using System.Drawing;
namespace DesertPaintCodex.Util
{
    public class Pixels
    {
        private readonly Bitmap _bitmap;
        private readonly int _pixelMultiplier;
        public int Height => _bitmap.Height / _pixelMultiplier;
        public int Width => _bitmap.Width / _pixelMultiplier;
        public Pixels(Bitmap bitmap, int pixellMutliplier)
        {
            _bitmap = bitmap;
            _pixelMultiplier = pixellMutliplier;
        }
        public Color ColorAt(int x, int y)
        {
            return _bitmap.GetPixel(x * _pixelMultiplier, y * _pixelMultiplier);
        }
        public bool DoesPixelMatch(int x, int y, Func<Color, bool> matchFunc)
        {
            int xMult = x * _pixelMultiplier;
            int yMult = y * _pixelMultiplier;
            if (xMult < 0 || xMult >= _bitmap.Width || yMult < 0 || yMult >= _bitmap.Height)
            {
                Debug.WriteLine("Problem at position [" + x + ", " + y + "]");
            }
            
            return matchFunc(_bitmap.GetPixel(x * _pixelMultiplier, y * _pixelMultiplier));
        }
        // Compute length of horizontal bar starting at x,y using matching function
        public int LengthOfColorAt(int x, int y, int scanWidth, Func<Color, bool> matchFunc)
        {
            int count = 0;
            for (int xVal = x; xVal < scanWidth + x; ++xVal)
            {
                Color c = _bitmap.GetPixel(xVal * _pixelMultiplier, y * _pixelMultiplier);
                if (!matchFunc(c))
                {
                    break;
                }
                ++count;
            }
            return count;
        }
        public bool IsSolidPatchAt(int x, int y, int patchWidth, int patchHeight)
        {
            if ((x + patchWidth >= Width) || (y + patchHeight >= Height)) return false;
            Color color = _bitmap.GetPixel(x * _pixelMultiplier, y * _pixelMultiplier);
            
            // Debug.WriteLine("color at {0},{1} = {2},{3},{4}", x, y, color.R, color.G, color.B);
            for (int pX = 0; pX < patchWidth; pX++)
            {
                for (int pY = 0; pY < patchHeight; pY++)
                {
                    if (!PixelColor.IsMatch(color, _bitmap.GetPixel((x + pX) * _pixelMultiplier, (y + pY) * _pixelMultiplier)))
                        return false;
                }
            }
            return true;
        }
    }
}
 |