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); } }
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(); }
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); } }