Exemplo n.º 1
0
        public VM()
        {
            _uiUpdater       = new Progress <byte[]>(image => RawImages.Add(image));
            _uiEffectUpdater = new Progress <byte[]>(image => EffectImages.Add(image));

            _downloader = new TransformBlock <string, byte[]>(DownloadAsync,
                                                              new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = DOWNLOAD_PARALLELISM
            });
            var broadcast = new BroadcastBlock <byte[]>(i => i);

            _downloader.LinkTo(broadcast);
            var originPicture = new ActionBlock <byte[]>(m => _uiUpdater.Report(m));

            broadcast.LinkTo(originPicture);

            var merger    = new TransformBlock <byte[][], byte[]>(imgs => MergeImages(imgs, "Sequence"));
            var mergerMod = new TransformBlock <byte[][], byte[]>(imgs => MergeImages(imgs, "Mod"));
            var reporter  = new ActionBlock <byte[]>(m => _uiEffectUpdater.Report(m));
            var buffer    = new BufferBlock <byte[]>();

            broadcast.LinkTo(buffer);
            var options = new ExecutionDataflowBlockOptions {
                BoundedCapacity = 2
            };

            var allEffects = (EffectType[])Enum.GetValues(typeof(EffectType));
            var nonGreedy  = new GroupingDataflowBlockOptions {
                Greedy = false
            };
            var batches = Enumerable.Range(0, allEffects.Length / 3)
                          .Select(_ => new BatchBlock <byte[]>(3, nonGreedy))
                          .ToArray();
            var batcheMods = Enumerable.Range(0, allEffects.Length / 3)
                             .Select(_ => new BatchBlock <byte[]>(3, nonGreedy))
                             .ToArray();
            int g = 0;

            foreach (EffectType effect in allEffects)
            {
                var effectTransform = new TransformBlock <byte[], byte[]>(
                    img => DoEffectAndUpdate(img, effect), options);
                buffer.LinkTo(effectTransform);
                var batch    = batches[g / 3];
                var batchMod = batcheMods[g % 3];
                g++;
                effectTransform.LinkTo(batch);
                effectTransform.LinkTo(batchMod);
                batch.LinkTo(merger);
                batchMod.LinkTo(mergerMod);
                merger.LinkTo(reporter);
                mergerMod.LinkTo(reporter);
            }

            for (int i = 0; i < 500; i++)
            {
                _downloader.Post(URL);
            }
        }
Exemplo n.º 2
0
    void Start()
    {
        // Ambil komponen Raw Image dari GameObject
        m_RawImage = GetComponent <RawImage>();

        // Ubah Tekstur yang Anda tentukan di Inspector
        m_RawImage.texture = m_Texture;
    }
 /// <summary>
 /// 清理视图组件所持有的基础控件列表。
 /// </summary>
 private void CleanControlList()
 {
     Images.Clear();
     RawImages.Clear();
     Buttons.Clear();
     InputFields.Clear();
     Sliders.Clear();
 }
Exemplo n.º 4
0
        public VM()
        {
            _uiUpdater       = new Progress <byte[]>(image => RawImages.Insert(0, image));
            _uiEffectUpdater = new Progress <byte[]>(image => EffectImages.Insert(0, image));

            _downloader = new TransformBlock <string, byte[]>(DownloadAsync,
                                                              new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = DOWNLOAD_PARALLELISM
            });
            var broadcast = new BroadcastBlock <byte[]>(i => i);

            _downloader.LinkTo(broadcast);
            var originPicture = new ActionBlock <byte[]>(m => _uiUpdater.Report(m));

            broadcast.LinkTo(originPicture);

            var reporter = new ActionBlock <byte[]>(m => _uiEffectUpdater.Report(m));
            var buffer   = new BufferBlock <byte[]>();

            broadcast.LinkTo(buffer);
            var options = new ExecutionDataflowBlockOptions {
                BoundedCapacity = 2
            };

            foreach (EffectType effect in (EffectType[])Enum.GetValues(typeof(EffectType)))
            {
                var effectTransform = new TransformBlock <byte[], byte[]>(
                    img => DoEffectAndUpdate(img, effect), options);
                effectTransform.LinkTo(reporter);
                buffer.LinkTo(effectTransform);
            }

            for (int i = 0; i < 500; i++)
            {
                _downloader.Post(URL);
            }
        }