コード例 #1
0
        public void When_rounding_colors()
        {
            var bytes1 = File.ReadAllBytes("Files/webcam_screenshot1.jpg");

            var stopwatch = Stopwatch.StartNew();

            var memoryStream  = new MemoryStream(bytes1);
            var image         = Image.FromStream(memoryStream);
            var bitmap        = new Bitmap(image);
            var blocksBuilder = new BlocksBuilder(bitmap);
            var pixelsBlocks  = new List <PixelsBlock>();

            for (int i = 0; i < blocksBuilder.GetBlockCount(); i++)
            {
                var block = blocksBuilder.GetPixelsBlock(i);
                pixelsBlocks.Add(block);
            }

            var output = new Bitmap(bitmap.Width, bitmap.Height);

            foreach (var block in pixelsBlocks)
            {
                foreach (Pixel pixel in block.Pixels)
                {
                    //var colorEncodingRate = 4; // coding with 6 bits (255/4 = 63)
                    //var bits = 6;

                    var colorEncodingRate = 8; // coding with 5 bits (255/8 = 31)
                    var bits = 5;

                    ushort red   = (ushort)Math.Max(0, pixel.Color.R / colorEncodingRate * colorEncodingRate);
                    ushort green = (ushort)Math.Max(0, pixel.Color.G / colorEncodingRate * colorEncodingRate);
                    ushort blue  = (ushort)Math.Max(0, pixel.Color.B / colorEncodingRate * colorEncodingRate);

                    int pixelColor = red;

                    pixelColor = (pixelColor << bits) + green;
                    pixelColor = (pixelColor << bits) + blue;

                    int pixelColor2 = pixelColor;

                    ushort blue2 = (ushort)(pixelColor2 & 0x0000FF);
                    pixelColor2 = pixelColor2 >> bits;
                    ushort green2 = (ushort)(pixelColor2 & 0x0000FF);
                    pixelColor2 = pixelColor2 >> bits;
                    ushort red2 = (ushort)(pixelColor2 & 0x0000FF);


                    //var color = Color.FromArgb(red, green, blue);
                    var color = Color.FromArgb(red2, green2, blue2);

                    output.SetPixel(pixel.X, pixel.Y, color);
                }
            }

            output.Save("When_rounding_colors.bmp");

            stopwatch.Stop();
            var elapsed = stopwatch.Elapsed;
        }
コード例 #2
0
        public async Task <JObject> BuildSlackPayload(string header, string sourceId, ICloseClient closeApi, string jobPostCustomer = null)
        {
            Dictionary <string, Option> customers = await closeApi.GetListOfCustomers();

            BlocksBuilder builder        = new BlocksBuilder();
            StaticSelect  customerSelect = new StaticSelect("customer_select", customers.Values.ToList(), "Customer");
            SlackAction   actions        = new SlackAction("actions")
                                           .AddElement(customerSelect);

            // check if we have detected a customer and if so set it as initial option
            if (!string.IsNullOrEmpty(jobPostCustomer))
            {
                actions.AddElement(new Button("addToClose_btn", "Add to Close", ButtonStyle.PRIMARY));
                if (customers.ContainsKey(jobPostCustomer))
                {
                    customerSelect.AddInitialOption(customers[jobPostCustomer]);
                }
            }

            // adding button in the proper place
            actions.AddElement(new Button("qualifyLead_btn", "Qualify Lead", string.IsNullOrEmpty(jobPostCustomer) ? ButtonStyle.PRIMARY : ButtonStyle.DEFAULT));

            builder.AddBlock(new Section(new Text(" ")));
            builder.AddBlock(new Section(new Text(" ")));
            builder.AddBlock(new Section(new Text("*" + header + "*" + Environment.NewLine + sourceId, "mrkdwn"), "msg_header"));
            builder.AddBlock(actions);
            builder.AddBlock(new Divider());

            return(builder.GetJObject());
        }
コード例 #3
0
        public void When_drawing_image()
        {
            var bytes1 = File.ReadAllBytes("Files/webcam_screenshot1.jpg");

            var stopwatch = Stopwatch.StartNew();

            var memoryStream = new MemoryStream(bytes1);
            var image        = Image.FromStream(memoryStream);
            var bitmap       = new Bitmap(image);

            var blocksBuilder = new BlocksBuilder(bitmap);
            //var pixelsBlocks = blocksBuilder.GetBlocks();
            //var pixelsBlocks = blocksBuilder.GetBlocksFast();

            var pixelsBlocks = new List <PixelsBlock>();

            bool altern = false;

            for (int i = 0; i < blocksBuilder.GetBlockCount(); i++)
            {
                altern = !altern;
                //if (altern)
                //    continue;
                var block = blocksBuilder.GetPixelsBlock(i);
                pixelsBlocks.Add(block);
            }

            var output = new Bitmap(bitmap.Width, bitmap.Height);

            foreach (var block in pixelsBlocks)
            {
                foreach (var pixel in block.Pixels)
                {
                    output.SetPixel(pixel.X, pixel.Y, pixel.Color);
                }
            }

            output.Save("When_drawing_image.bmp");

            stopwatch.Stop();
            var elapsed = stopwatch.Elapsed;
        }
コード例 #4
0
        public void When_use_Fast_block_bluider()
        {
            var bytes1 = File.ReadAllBytes("Files/webcam_screenshot1.jpg");

            var stopwatch = Stopwatch.StartNew();

            var memoryStream = new MemoryStream(bytes1);
            var image        = Image.FromStream(memoryStream);
            var bitmap       = new Bitmap(image);

            var blocksBuilder = new BlocksBuilder(bitmap);

            //var pixelsBlocks = blocksBuilder.GetBlocks();
            //var pixelsBlocks = blocksBuilder.GetBlocksFast();



            stopwatch.Stop();
            var elapsed = stopwatch.Elapsed;
        }
コード例 #5
0
        public void When_building_blocks()
        {
            var bytes1 = File.ReadAllBytes("Files/webcam_screenshot1.jpg");

            var stopwatch = Stopwatch.StartNew();

            var memoryStream = new MemoryStream(bytes1);
            var image        = Image.FromStream(memoryStream);
            var bitmap       = new Bitmap(image);

            //var graphics = Graphics.FromImage(bitmap);


            var blocksBuilder = new BlocksBuilder(bitmap);
            var pixelsBlocks  = blocksBuilder.GetBlocks();

            //var imageData = blocksBuilder.GetImageData();

            var pixelsBlocks2 = blocksBuilder.GetBlocksFast();


            stopwatch.Stop();

            var elapsed = stopwatch.Elapsed;

            var fps = 1000 / stopwatch.ElapsedMilliseconds;

            Assert.AreEqual(pixelsBlocks.First().Pixels.First().Color, pixelsBlocks2.First().Pixels.First().Color);

            Assert.IsTrue(pixelsBlocks.All(b => b.Pixels.Count == BlocksBuilder.BlockSize * BlocksBuilder.BlockSize));

            for (int i = 0; i < pixelsBlocks.Count; i++)
            {
                for (int j = 0; j < pixelsBlocks[i].Pixels.Count; j++)
                {
                    Assert.AreEqual(pixelsBlocks[i].Pixels[j].X, pixelsBlocks2[i].Pixels[j].X);
                    Assert.AreEqual(pixelsBlocks[i].Pixels[j].Y, pixelsBlocks2[i].Pixels[j].Y);
                    Assert.AreEqual(pixelsBlocks[i].Pixels[j].Color, pixelsBlocks2[i].Pixels[j].Color);
                }
            }
        }
コード例 #6
0
ファイル: SlackHelper.cs プロジェクト: elit0451/SlackJobApp
        public static JObject BuildDefaultSlackPayload(string header, Option selectedOption, SlackPostState postState, string leadId = "", Dictionary <string, Option> customers = null)
        {
            BlocksBuilder builder = new BlocksBuilder();
            SlackAction   actions = new SlackAction("actions");

            if (!(customers is null))
            {
                StaticSelect customerSelect = new StaticSelect("customer_select", customers.Values.ToList(), "Customer");
                actions.AddElement(customerSelect);

                if (!(selectedOption is null))
                {
                    customerSelect.AddInitialOption(selectedOption);
                }
            }

            actions.AddElement(new Button("addToClose_btn", "Add to Close", ButtonStyle.PRIMARY));

            // adding button in the proper place
            actions.AddElement(new Button("qualifyLead_btn", "Qualify Lead"));

            builder.AddBlock(new Section(new Text(" ")));
            builder.AddBlock(new Section(new Text(" ")));
            builder.AddBlock(new Section(new Text(header, "mrkdwn"), "msg_header"));

            if (postState == SlackPostState.ACTIONS)
            {
                builder.AddBlock(actions);
            }
            else if (postState == SlackPostState.FINAL)
            {
                builder.AddBlock(new Section(new Text($":white_check_mark: *Opportunity added to <https://app.close.com/lead/{leadId}|Close.com>*", "mrkdwn")));
            }

            builder.AddBlock(new Divider());

            return(builder.GetJObject());
        }
コード例 #7
0
        public void When_store_with_BitmapCompressor()
        {
            var bytes1 = File.ReadAllBytes("Files/webcam_screenshot1.jpg");

            var stopwatch = Stopwatch.StartNew();

            var memoryStream  = new MemoryStream(bytes1);
            var image         = Image.FromStream(memoryStream);
            var bitmap        = new Bitmap(image);
            var blocksBuilder = new BlocksBuilder(bitmap);
            var pixelsBlocks  = new List <PixelsBlock>();

            for (int i = 0; i < blocksBuilder.GetBlockCount(); i++)
            {
                var block = blocksBuilder.GetPixelsBlock(i);
                pixelsBlocks.Add(block);
            }

            var compressor = new BitmapCompressor();

            using (FileStream fileStream = File.OpenWrite("out.compressed"))
                using (var writer = new BinaryWriter(fileStream))
                {
                    foreach (var block in pixelsBlocks)
                    {
                        foreach (Pixel pixel in block.Pixels)
                        {
                            ushort color = compressor.CompressColor(pixel.Color);
                            writer.Write(color);
                        }
                    }

                    fileStream.Flush(true);
                }

            stopwatch.Stop();
            var elapsed = stopwatch.Elapsed;
        }
コード例 #8
0
        /// <summary>
        /// A Lambda function to respond to HTTP Get methods from API Gateway
        /// </summary>
        /// <param name="request"></param>
        /// <returns>The list of blogs</returns>
        public APIGatewayProxyResponse Get(APIGatewayProxyRequest request, ILambdaContext context)
        {
            context.Logger.LogLine("Get Request\n");

            var requestBody   = Utility.GetBodyJObject(request.Body);
            var command       = (string)requestBody.SelectToken("command");
            var commandParams = new string[1];
            var response      = new APIGatewayProxyResponse();

            switch (command.ToLower().Trim())
            {
            case "/skill":
                var commandText = (string)requestBody.SelectToken("text");

                if (!string.IsNullOrEmpty(commandText))
                {
                    commandParams = commandText.Trim().Split(" ");
                    var skillName = commandParams[0];
                    var amount    = Convert.ToInt32(commandParams[1]);

                    var queryObj = new JObject
                    {
                        { "limit", amount },
                        { "skillName", skillName }
                    };

                    var httpClient = new HttpClient();
                    HttpResponseMessage httpResponse = httpClient.PostAsJsonAsync("https://7dq5d3f0yb.execute-api.eu-west-1.amazonaws.com/production/relatedskills", queryObj).Result;

                    var payload = httpResponse.Content.ReadAsJsonAsync <JArray>().Result;

                    var skills = JsonConvert.DeserializeObject <List <Skill> >(payload.ToString());

                    var slackBuilder = new BlocksBuilder();
                    slackBuilder.AddBlock(new Section(new Text(" ")));
                    slackBuilder.AddBlock(new Section(new Text($"`Skill: {skillName.ToUpper()}`", "mrkdwn")));
                    slackBuilder.AddBlock(new Divider());

                    var slackSection = new Section();

                    if (skills.Count > 0)
                    {
                        for (int i = 0; i < skills.Count; i++)
                        {
                            if (i % 10 == 0 && i != 0)
                            {
                                slackBuilder.AddBlock(slackSection);
                                slackSection = new Section();
                            }

                            slackSection.AddField($"```{skills[i].Name}```", "mrkdwn");
                        }

                        slackBuilder.AddBlock(slackSection);
                    }
                    else
                    {
                        slackBuilder.AddBlock(new Section(new Text("*No related skills found*", "mrkdwn")));
                    }

                    var slackPayload = slackBuilder.GetJObject();

                    context.Logger.LogLine(slackPayload.ToString());

                    response = new APIGatewayProxyResponse
                    {
                        StatusCode = (int)HttpStatusCode.OK,
                        Body       = slackPayload.ToString(),
                        Headers    = new Dictionary <string, string> {
                            { "Content-Type", "application/json" }
                        }
                    };
                }
                // TODO: return msg that skill doesn't exist
                break;
            }

            return(response);
        }