Example #1
0
        /// <summary>
        /// GENERATE PUBLISH TASKS
        /// Given a published image, send it to all associated destinations.
        /// </summary>
        /// <param name="imageResult"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public List <Task> GeneratePublishTasks(GenerateImageResult imageResult, CancellationToken token)
        {
            var processor    = new PublishProcessor();
            var destinations = DbRepo.ListDestinations(imageResult);
            var items        = new List <Task>();

            foreach (var dest in destinations)
            {
                items.Add(Task <PublishResult> .Factory.StartNew(() => processor.Publish(dest), token, TaskCreationOptions.LongRunning, TaskScheduler.Default)
                          .ContinueWith(taskInfo => Logit.LogPublishResult(taskInfo.Result))
                          );
            }
            return(items);
        }
Example #2
0
        /// <summary>
        /// LIST DESTINATIONS
        /// </summary>
        /// <param name="imageResult"></param>
        /// <returns></returns>
        public static List <EntityDest> ListDestinations(GenerateImageResult imageResult)
        {
            var items = new List <EntityDest>();

            for (int i = 10; i <= 20; i += 10)
            {
                items.Add(new EntityDest
                {
                    Name             = imageResult.ImageName + "-dest" + i.ToString(),
                    DemoWaitMs       = i * 1000,
                    PublishTimeoutMs = 13000,
                    Camera           = imageResult.Camera
                });
            }
            return(items);
        }
        public GenerateImageResult Generate(IWord word, ELearnMode learnMode)
        {
            var result    = new GenerateImageResult();
            var syllables = _wordParseProvider.GetOrderedSyllables(word);

            var originalChars = CutToMaxLength(word.OriginalWord, HanMaxCharsCount);

            var originalLength = 0;
            var pinyinLength   = 0;

            syllables = syllables.TakeWhile(a =>
            {
                originalLength++;
                pinyinLength += a.Pinyin.Length;

                return(pinyinLength < MainMaxCharsCount && originalLength <= originalChars.Length);
            }).ToArray();

            var y        = 0f;
            var maxWidth = 0f;

            using (var img = new Image <Rgba32>(MaxWidth, MaxHeight))
            {
                var builder  = new GlyphBuilder();
                var renderer = new TextRenderer(builder);

                img.Mutate(a => a.Fill(BackgroundColor));

                if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.OriginalWord)
                {
                    var text          = CutToMaxRow(originalChars, HanMaxLineCharsCount, true);
                    var renderOptions = GetRenderOptions(KaitiHanFont, y);
                    var size          = TextMeasurer.Measure(text, renderOptions);
                    y += size.Height + LineSpace;

                    if (size.Width > maxWidth)
                    {
                        maxWidth = size.Width;
                    }

                    var paths = RenderText(builder, renderer, renderOptions, text);

                    for (var i = 0; i < Math.Min(syllables.Length, paths.Length); i++)
                    {
                        var iLocal   = i;
                        var syllable = syllables[iLocal];
                        img.Mutate(a => a.Fill(syllable.Color.ToRgba32(), paths[iLocal]));
                    }
                }

                if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.Pronunciation)
                {
                    var text          = string.Join(" ", syllables.Select(a => a.Pinyin));
                    var renderOptions = GetRenderOptions(ArialUnicodeMainFont, y);
                    var size          = TextMeasurer.Measure(text, renderOptions);
                    y += size.Height + LineSpace;

                    if (size.Width > maxWidth)
                    {
                        maxWidth = size.Width;
                    }

                    var paths = RenderText(builder, renderer, renderOptions, text);

                    var currentPathPosition = 0;
                    foreach (var syllable in syllables)
                    {
                        if (currentPathPosition >= paths.Length)
                        {
                            break;
                        }

                        var pathCollection = new PathCollection(paths.Skip(currentPathPosition).Take(syllable.Pinyin.Length));

                        img.Mutate(a => a.Fill(syllable.Color.ToRgba32(), pathCollection));
                        currentPathPosition += syllable.Pinyin.Length;
                    }
                }

                if (learnMode == ELearnMode.FullView || learnMode != ELearnMode.Translation)
                {
                    var renderOptions = GetRenderOptions(ArialUnicodeMainFont, y);
                    var transChars    = CutToMaxRow(CutToMaxLength(word.Translation, MainMaxCharsCount, string.Empty),
                                                    MainMaxLineCharsCount);
                    var size = TextMeasurer.Measure(transChars, renderOptions);
                    y += size.Height + LineSpace;

                    if (size.Width > maxWidth)
                    {
                        maxWidth = size.Width;
                    }

                    var paths = RenderText(builder, renderer, renderOptions, transChars);
                    img.Mutate(a => a.Fill(MainColor, new PathCollection(paths)));
                }

                var finalWidth = (int)(maxWidth + 2 * Padding);
                img.Mutate(a => a.Crop(new Rectangle((MaxWidth - finalWidth) / 2, 0, finalWidth, (int)y)));

                result.Width  = img.Width;
                result.Height = img.Height;
                using (var ms = new MemoryStream())
                {
                    img.Save(ms, new PngEncoder());
                    result.ImageBody = ms.ToArray();
                }
            }

            return(result);
        }
Example #4
0
 /// <summary>
 /// LOG GENERATE IMAGE RESULT
 /// </summary>
 /// <param name="generateImageResult"></param>
 /// <returns></returns>
 public static GenerateImageResult LogGenerateImageResult(GenerateImageResult generateImageResult)
 {
     LogVerbose("Published Image generated for camera: " + generateImageResult.Camera.Name
                + ", published image filename: " + generateImageResult.ImageName + " (thread " + Thread.CurrentThread.ManagedThreadId.ToString() + ")");
     return(generateImageResult);
 }