示例#1
0
        public async System.Threading.Tasks.Task ReadFile(StorageFile file)
        {
            byte[] fileBytes = null;

            Pithline.FMS.BusinessLogic.Portable.TIModels.ImageCapture imageCapture;
            using (IRandomAccessStreamWithContentType stream = await file.OpenReadAsync())
            {
                fileBytes = new byte[stream.Size];
                using (DataReader reader = new DataReader(stream))
                {
                    await reader.LoadAsync((uint)stream.Size);

                    reader.ReadBytes(fileBytes);
                    var bitmap = new BitmapImage();
                    stream.Seek(0);
                    await bitmap.SetSourceAsync(stream);

                    imageCapture = new Pithline.FMS.BusinessLogic.Portable.TIModels.ImageCapture
                    {
                        ImageBitmap = bitmap,
                        ImageData   = Convert.ToBase64String(fileBytes),
                        guid        = Guid.NewGuid(),
                        RepairId    = 0,
                        Component   = ""
                    };
                }
            }

            EventAggregator.GetEvent <ImageCaptureTranEvent>().Publish(imageCapture);
        }
示例#2
0
        public async System.Threading.Tasks.Task ReadFile(StorageFile file, ServiceSchedulingDetail serviceSchedulingDetail)
        {
            byte[] fileBytes = null;
            using (IRandomAccessStreamWithContentType stream = await file.OpenReadAsync())
            {
                fileBytes = new byte[stream.Size];
                using (DataReader reader = new DataReader(stream))
                {
                    await reader.LoadAsync((uint)stream.Size);

                    reader.ReadBytes(fileBytes);

                    var bitmap = new BitmapImage();
                    stream.Seek(0);
                    await bitmap.SetSourceAsync(stream);

                    if (serviceSchedulingDetail == null)
                    {
                        serviceSchedulingDetail = new ServiceSchedulingDetail();
                    }
                    serviceSchedulingDetail.OdoReadingImageCapture = new ImageCapture
                    {
                        ImageBitmap = bitmap,
                        ImageBinary = Convert.ToBase64String(fileBytes),
                    };
                    serviceSchedulingDetail.ODOReadingSnapshot = Convert.ToBase64String(fileBytes);
                }
            }

            EventAggregator.GetEvent <ServiceSchedulingDetailEvent>().Publish(serviceSchedulingDetail);
        }
        // For picture
        public async void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs args)
        {
            if ((args.ContinuationData["EntityImage"] as string) == "EntityImage" && args.Files != null && args.Files.Count > 0)
            {
                // Check if the entity has entityimage anyway.
                var imageField = fields.Where(x => x.FieldMetadata.LogicalName == "entityimage").FirstOrDefault();
                if (imageField != null)
                {
                    StorageFile file = args.Files[0];
                    IRandomAccessStreamWithContentType fileStream = await file.OpenReadAsync();

                    BitmapImage im = new BitmapImage();
                    im.SetSource(fileStream);
                    fileStream.Seek(0);
                    byte[] fileBytes = null;
                    fileBytes = new byte[fileStream.Size];
                    using (DataReader reader = new DataReader(fileStream))
                    {
                        await reader.LoadAsync((uint)fileStream.Size);

                        reader.ReadBytes(fileBytes);
                    }

                    imageField.FieldData = fileBytes;
                    ((this.CRMRecordModify.lvFields.Items.First() as Grid).Children[1] as EntityImageControl).ImageBytes = fileBytes;
                }
                return;
            }
        }
示例#4
0
        public async System.Threading.Tasks.Task ShowImage(StorageFile file)
        {
            var bitmap = new BitmapImage();

            using (IRandomAccessStreamWithContentType stream = await file.OpenReadAsync())
            {
                stream.Seek(0);
                await bitmap.SetSourceAsync(stream);

                this.img.Source = bitmap;
                this.img.Name   = file.DisplayName;
            }
        }
示例#5
0
        /// <summary>
        /// Loads the byte data from a StorageFile
        /// </summary>
        /// <param name="file">The file to read</param>
        public async Task <byte[]> ReadFile(StorageFile file)
        {
            using (IRandomAccessStreamWithContentType stream = await file.OpenReadAsync())
            {
                stream.Seek((ulong)0);
                byte[]  fileBytes = new byte[stream.Size];
                var     buffer    = CryptographicBuffer.CreateFromByteArray(fileBytes);
                IBuffer rd        = await stream.ReadAsync(buffer, (uint)fileBytes.Length, InputStreamOptions.None);

                rd.CopyTo(fileBytes);
                return(fileBytes);
            }
        }
示例#6
0
        private void SeekDownload_Click(object sender, RoutedEventArgs e)
        {
            // Cancel the ongoing read operation (if any).
            if (readOperation != null)
            {
                readCancellationTokenSource.Cancel();

                // Re-create the CancellationTokenSource for future reads.
                readCancellationTokenSource = new CancellationTokenSource();
            }

            if (randomAccessStream != null)
            {
                // Update the stream's seek position to the user-selected one.
                // The new seek position will take effect on the next ReadAsync operation.
                var   seekPositionInMegaBytes = (ulong)seekSlider.Value;
                ulong seekPositionInBytes     = seekPositionInMegaBytes * BytesPerMegaByte;
                randomAccessStream.Seek(seekPositionInBytes);
            }
        }
示例#7
0
        private async void OpenImageFile(string fileName)
        {
            StorageFolder installFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
            StorageFolder subFolder     = await installFolder.GetFolderAsync("Assets");

            subFolder = await subFolder.GetFolderAsync("Pickers");

            StorageFile file = await subFolder.GetFileAsync(fileName);

            using (IRandomAccessStreamWithContentType reader = await file.OpenReadAsync())
            {
                // There has to be a better way to do this.
                BitmapImage image = new BitmapImage();
                await image.SetSourceAsync(reader);

                WriteableBitmap imageBitmap = new WriteableBitmap(image.PixelWidth, image.PixelHeight);
                reader.Seek(0);
                await imageBitmap.SetSourceAsync(reader);

                m_imagePixelArray = imageBitmap.PixelBuffer.ToArray();
                m_imageHeight     = imageBitmap.PixelHeight;
                m_imageWidth      = imageBitmap.PixelWidth;
            }
        }
 private static async Task<int> FileReadStreamSeekTestAsync(IRandomAccessStreamWithContentType fileStream, long streamReadSize, byte[] bufferToCompare)
 {
     int attempts = 1;
     ulong position = 0;
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
     attempts++;
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 512, 512);
     Assert.AreEqual(position, fileStream.Position);
     position = (ulong)(bufferToCompare.Length - 128);
     fileStream.Seek(position);
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 128);
     attempts++;
     Assert.AreEqual(position, fileStream.Position);
     position = 4096;
     fileStream.Seek(position);
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
     attempts++;
     Assert.AreEqual(position, fileStream.Position);
     position += 4096;
     fileStream.Seek(position);
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
     Assert.AreEqual(position, fileStream.Position);
     position -= 4096;
     fileStream.Seek(position);
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 128, 128);
     Assert.AreEqual(position, fileStream.Position);
     position = (ulong)(streamReadSize + 4096 - 512);
     fileStream.Seek(position);
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
     attempts++;
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
     Assert.AreEqual(position, fileStream.Position);
     position -= 1024;
     fileStream.Seek(position);
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 2048, 2048);
     Assert.AreEqual(position, fileStream.Position);
     position = (ulong)(bufferToCompare.Length - 128);
     fileStream.Seek(position);
     Assert.AreEqual(position, fileStream.Position);
     position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 128);
     Assert.AreEqual(position, fileStream.Position);
     return attempts;
 }
示例#9
0
        private async Task StartDownloadAndReadContentsAsync()
        {
            try
            {
                // Retrieve a random access stream from the download operation. Every OpenReadAsync() operation returns
                // a new stream instance that is independent of previous ones (i.e., the seek position of one stream
                // isn't affected by calls on another stream).
                //
                // This sample demonstrates the direct usage of a DownloadOperation's random access stream and its
                // effects on the ongoing transfer. However, bear in mind that there are a variety of operations
                // that can manage the stream on the app's behalf for specific scenarios. For instance, a
                // DownloadOperation pointing to a video URL can be consumed by the MediaPlayer class in four easy
                // steps:
                //
                // var randomAccessStreamReference = download.GetResultRandomAccessStreamReference();
                // stream = await randomAccessStreamReference.OpenReadAsync();
                // var mediaPlayer = new Windows.Media.Playback.MediaPlayer();
                // mediaPlayer.Source = Windows.Media.Core.MediaSource.CreateFromStream(stream, stream.ContentType);

                var randomAccessStreamReference = download.GetResultRandomAccessStreamReference();
                randomAccessStream = await randomAccessStreamReference.OpenReadAsync();

                // Start the download. If the server doesn't support random access, the download will fail
                // with WebErrorStatus.InsufficientRangeSupport or WebErrorStatus.MissingContentLengthSupport.
                IAsyncOperationWithProgress <DownloadOperation, DownloadOperation> downloadOperation = download.StartAsync();
                downloadOperation.Progress += OnDownloadProgress;
                Task downloadTask = downloadOperation.AsTask();

                startDownloadButton.IsEnabled = false;
                pauseDownloadButton.IsEnabled = true;

                // Read data while the download is still ongoing. Use a 1 MB read buffer for that purpose.
                var readBuffer = new Windows.Storage.Streams.Buffer(BytesPerMegaByte);
                while (!downloadTask.IsCompleted)
                {
                    ulong readOffsetInBytes = randomAccessStream.Position;

                    PreviousReadText.Text = CurrentReadText.Text;
                    CurrentReadText.Text  = $"Reading from offset {readOffsetInBytes:n0}";

                    readOperation = randomAccessStream.ReadAsync(
                        readBuffer,
                        readBuffer.Capacity,
                        InputStreamOptions.None).
                                    AsTask(readCancellationTokenSource.Token);

                    // Update the UI to show the current read's position.
                    currentPositionSlider.Value = readOffsetInBytes / BytesPerMegaByte;

                    try
                    {
                        // Wait for the read to complete.
                        IBuffer bytesRead = await readOperation;
                        CurrentReadText.Text += $", completed with {bytesRead.Length:n0} bytes";

                        // At this point, a real app would process the 'bytesRead' data to do something interesting
                        // with it (e.g., display video and/or play audio).

                        if (randomAccessStream.Position >= randomAccessStream.Size)
                        {
                            // We have reached EOF. Wrap around to the beginning while we wait for the download to complete.
                            randomAccessStream.Seek(0);
                        }
                    }
                    catch (OperationCanceledException)
                    {
                        // The ongoing read was canceled by SeekDownload_Click(...) in order for a new download
                        // position to take effect immediately.
                        CurrentReadText.Text += ", cancelled.";
                    }
                }

                // Wait for the download to complete.
                await downloadTask;

                rootPage.NotifyUser("Download completed successfully", NotifyType.StatusMessage);
            }
            catch (Exception ex) when(IsWebException("Execution error", ex))
            {
                // Abandon the operation if a web exception occurs.
            }
            finally
            {
                download           = null;
                randomAccessStream = null;
                readOperation      = null;

                startDownloadButton.IsEnabled  = true;
                pauseDownloadButton.IsEnabled  = false;
                resumeDownloadButton.IsEnabled = false;
            }
        }
示例#10
0
        private static async Task <int> BlobReadStreamSeekTestAsync(IRandomAccessStreamWithContentType blobStream, long streamReadSize, byte[] bufferToCompare)
        {
            int   attempts = 1;
            ulong position = 0;

            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 512, 512);

            Assert.AreEqual(position, blobStream.Position);
            position = (ulong)(bufferToCompare.Length - 128);
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 128);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position = 4096;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position += 4096;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            Assert.AreEqual(position, blobStream.Position);
            position -= 4096;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 128, 128);

            Assert.AreEqual(position, blobStream.Position);
            position = (ulong)(streamReadSize + 4096 - 512);
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            Assert.AreEqual(position, blobStream.Position);
            position -= 1024;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 2048, 2048);

            Assert.AreEqual(position, blobStream.Position);
            position = (ulong)(bufferToCompare.Length - 128);
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 128);

            Assert.AreEqual(position, blobStream.Position);
            return(attempts);
        }
        private static async Task <int> BlobReadStreamSeekTestAsync(IRandomAccessStreamWithContentType blobStream, long streamReadSize, byte[] bufferToCompare)
#endif
        {
            int   attempts = 1;
            ulong position = 0;

            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 512, 512);

            Assert.AreEqual(position, blobStream.Position);
            position = (ulong)(bufferToCompare.Length - 128);
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 128);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position = 4096;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position += 4096;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            Assert.AreEqual(position, blobStream.Position);
            position -= 4096;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 128, 128);

            Assert.AreEqual(position, blobStream.Position);
            position = (ulong)(streamReadSize + 4096 - 512);
            blobStream.Seek(position);
#if ASPNET_K
            //don't know why adding these two line will pass, but this this the same as the desktop test
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 512);
#endif
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            attempts++;
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 1024);

            Assert.AreEqual(position, blobStream.Position);
            position -= 1024;
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 2048, 2048);

            Assert.AreEqual(position, blobStream.Position);
            position = (ulong)(bufferToCompare.Length - 128);
            blobStream.Seek(position);
            Assert.AreEqual(position, blobStream.Position);
            position += await BlobReadStreamSeekAndCompareAsync(blobStream, bufferToCompare, position, 1024, 128);

            Assert.AreEqual(position, blobStream.Position);
            return(attempts);
        }
        private static async Task<int> FileReadStreamSeekTestAsync(IRandomAccessStreamWithContentType fileStream, long streamReadSize, byte[] bufferToCompare)
#endif
        {
            int attempts = 1;
            ulong position = 0;
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
            attempts++;
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 512, 512);
            Assert.AreEqual(position, fileStream.Position);
            position = (ulong)(bufferToCompare.Length - 128);
            fileStream.Seek(position);
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 128);
            attempts++;
            Assert.AreEqual(position, fileStream.Position);
            position = 4096;
            fileStream.Seek(position);
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
            attempts++;
            Assert.AreEqual(position, fileStream.Position);
            position += 4096;
            fileStream.Seek(position);
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
            Assert.AreEqual(position, fileStream.Position);
            position -= 4096;
            fileStream.Seek(position);
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 128, 128);
            Assert.AreEqual(position, fileStream.Position);
            position = (ulong)(streamReadSize + 4096 - 512);
            fileStream.Seek(position);
#if ASPNET_K
            //don't know why adding these two line will pass, but this this the same as the desktop test
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 512);
#endif
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
            attempts++;
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 1024);
            Assert.AreEqual(position, fileStream.Position);
            position -= 1024;
            fileStream.Seek(position);
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 2048, 2048);
            Assert.AreEqual(position, fileStream.Position);
            position = (ulong)(bufferToCompare.Length - 128);
            fileStream.Seek(position);
            Assert.AreEqual(position, fileStream.Position);
            position += await FileReadStreamSeekAndCompareAsync(fileStream, bufferToCompare, position, 1024, 128);
            Assert.AreEqual(position, fileStream.Position);
            return attempts;
        }