コード例 #1
0
        /// <summary>
        /// Captures an image asynchronously.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <param name="ct">The ct.</param>
        /// <returns>The image bytes</returns>
        /// <exception cref="InvalidOperationException">Cannot use camera module because it is currently busy.</exception>
        public async Task <byte[]> CaptureImageAsync(CameraStillSettings settings, CancellationToken ct = default)
        {
            if (Instance.IsBusy)
            {
                throw new InvalidOperationException("Cannot use camera module because it is currently busy.");
            }

            if (settings.CaptureTimeoutMilliseconds <= 0)
            {
                throw new ArgumentException($"{nameof(settings.CaptureTimeoutMilliseconds)} needs to be greater than 0");
            }

            try
            {
                OperationDone.Reset();

                var output   = new MemoryStream();
                var exitCode = await ProcessRunner.RunProcessAsync(
                    settings.CommandName,
                    settings.CreateProcessArguments(),
                    (data, proc) =>
                {
                    output.Write(data, 0, data.Length);
                },
                    null,
                    true,
                    ct);

                return(exitCode != 0 ? new byte[] { } : output.ToArray());
            }
            finally
            {
                OperationDone.Set();
            }
        }
コード例 #2
0
        /// <summary>
        /// Captures a JPEG encoded image asynchronously at 90% quality.
        /// </summary>
        /// <param name="width">The width.</param>
        /// <param name="height">The height.</param>
        /// <param name="ct">The ct.</param>
        /// <returns>The image bytes</returns>
        public Task <byte[]> CaptureImageJpegAsync(int width, int height, CancellationToken ct = default)
        {
            var settings = new CameraStillSettings
            {
                CaptureWidth               = width,
                CaptureHeight              = height,
                CaptureJpegQuality         = 90,
                CaptureTimeoutMilliseconds = 300,
            };

            return(CaptureImageAsync(settings, ct));
        }
コード例 #3
0
 /// <summary>
 /// Captures an image.
 /// </summary>
 /// <param name="settings">The settings.</param>
 /// <returns>The image bytes</returns>
 public byte[] CaptureImage(CameraStillSettings settings)
 {
     return(CaptureImageAsync(settings).GetAwaiter().GetResult());
 }
コード例 #4
0
        /// <summary>
        /// Captures an image asynchronously.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <returns></returns>
        public async Task <byte[]> CaptureImageAsync(CameraStillSettings settings)
        {
            var cts = new CancellationTokenSource();

            return(await CaptureImageAsync(settings, cts.Token));
        }