Strabo.Core.ImageProcessing.ColorHistogram.CheckImageColors C# (CSharp) Method

CheckImageColors() public method

public CheckImageColors ( Bitmap srcimg, int min_number_color ) : bool
srcimg System.Drawing.Bitmap
min_number_color int
return bool
        public bool CheckImageColors(Bitmap srcimg, int min_number_color)
        {
            srcimg = ImageUtils.AnyToFormat24bppRgb(srcimg);
            HashSet<int> color24bppRgb = new HashSet<int>();
            // get source image size
            int width = srcimg.Width;
            int height = srcimg.Height;

            PixelFormat srcFmt = (srcimg.PixelFormat == PixelFormat.Format8bppIndexed) ?
                PixelFormat.Format8bppIndexed : PixelFormat.Format24bppRgb;

            // lock source bitmap data
            BitmapData srcData = srcimg.LockBits(
                new Rectangle(0, 0, width, height),
                ImageLockMode.ReadOnly, srcFmt);

            int srcOffset = srcData.Stride - ((srcFmt == PixelFormat.Format8bppIndexed) ? width : width * 3);

            // do the job
            unsafe
            {
                byte* src = (byte*)srcData.Scan0.ToPointer();

                {
                    // RGB binarization
                    for (int y = 0; y < height; y++)
                    {
                        for (int x = 0; x < width; x++, src += 3)
                        {
                            color24bppRgb.Add(src[RGB.R] * 256 * 256 + src[RGB.G] * 256 + src[RGB.B]);
                            if (color24bppRgb.Count > min_number_color)
                            {
                                srcimg.UnlockBits(srcData);
                                return true;
                            }
                        }
                        src += srcOffset;
                    }
                }
            }
            srcimg.UnlockBits(srcData);
            return false;
        }

Usage Example

        public void Apply(string intermediatePath)
        {
            //tergetURL = "http://secure.futureclimateinfo.com/api/wms?request=GetMap&BBOX=314100,543800,314600,544300&SRS=EPSG:27700&WIDTH=1056&HEIGHT=1056&LAYERS=nls-sixinch&STYLES=&FORMAT=image/png";
            //tergetURL = "http://secure.futureclimateinfo.com/api/wms?SERVICE=WMS&VERSION=1.1.1&request=GetMap&BBOX=314100,543800,314600,544300&SRS=EPSG:27700&WIDTH=1056&HEIGHT=1056&LAYERS=nls-sixinch&STYLES=&FORMAT=image/pnG";
            //tergetURL = "http://secure.futureclimateinfo.com/api/wms?request=GetMap&BBOX=589400,194000,589900,194500&SRS=EPSG:27700&WIDTH=1056&HEIGHT=1056&LAYERS=nls-sixinch&STYLES=&FORMAT=image/png";
            //tergetURL = "http://secure.futureclimateinfo.com/api/wms?request=GetMap&BBOX=589400,194000,590400,195000&SRS=EPSG:27700&WIDTH=947&HEIGHT=947&LAYERS=nls-sixinch&STYLES=&FORMAT=image/pnG";
            //MapServerParameters.targetURL = "http://secure.futureclimateinfo.com/api/wms?&&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&BBOX=597528,209822,598528,210822&SRS=EPSG:27700&WIDTH=1500&HEIGHT=1500&LAYERS=nls-sixinch:&STYLES=&FORMAT=image/png&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSP...
            Bitmap SourceImage = ConnectToMapServer.ConnectToWMS(MapServerParameters.targetURL);

            SourceImage.Save(intermediatePath+StraboParameters.sourceMapFileName);
            ColorHistogram ch = new ColorHistogram();

            if (!ch.CheckImageColors(SourceImage,2))
            {
                Exception e = new Exception("The returned image is invalid, it has less than two colors.");
                Log.WriteLine("The returned image is invalid, it has less than two colors.");
                throw e;
            }
        }