C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: Webカメラ解像度変更


(過去ログ 177 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■101751 / inTopicNo.1)  Webカメラ解像度変更
  
□投稿者/ MASA (3回)-(2023/04/14(Fri) 22:17:56)

分類:[C#] 

c# Windowsフォームアプリケーション .NetFramework

Webカメラのメモリー不足ではお世話になりました
その後webカメラ側で解像度が変えられないことが分かり
色々試したのですがうまくいかないので
解像度の変更の部分を教えて下さい
button1_Click以降です

using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;

namespace AForgeCameraCapturePriject_05040913
{
    public partial class Form1 : Form
    {
        private FilterInfoCollection CaptureDevice;
        private VideoCaptureDevice VideoDevice;
        public Form1()
        {
            InitializeComponent();
            getallcameralist();
            btn_close.Enabled = false;
        }
        void getallcameralist()
        {
            CaptureDevice = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            foreach (FilterInfo Devices in CaptureDevice)
            {
                comboBox_cameralist.Items.Add(Devices.Name);
                comboBox_cameralist.SelectedIndex = 0;
            }
        }
        
        private void btn_start_Click(object sender, EventArgs e)
        {
            if (comboBox_cameralist.SelectedIndex != -1 ) 
            {
                try
                {
                    VideoDevice = new VideoCaptureDevice(CaptureDevice[comboBox_cameralist.SelectedIndex].MonikerString);
                    VideoDevice.NewFrame += new NewFrameEventHandler(NewVideoFrame);
                    VideoDevice.Start();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        private void NewVideoFrame(object sender, NewFrameEventArgs eventArgs)
        {
            pictureBox1.Image?.Dispose();
            pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
        }

        private void btn_capture_Click(object sender, EventArgs e)
        {

            pictureBox2.Image = (Bitmap)pictureBox1.Image.Clone();
            DateTime dt = DateTime.Now;

            string fileName = @"c:\Image\" + dt.ToString("yyyyMMdd") + "_" + dt.ToString("HHmmss") + "-" +   ".jpg";//+textbox1.Text+
            var bitmap = new Bitmap(pictureBox2.Width, pictureBox2.Height);
            pictureBox2.DrawToBitmap(bitmap, pictureBox2.ClientRectangle);

            System.Drawing.Imaging.ImageFormat imageFormat = null;

            imageFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
            bitmap.Save(fileName, imageFormat);
        }
        private void btn_stop_Click(object sender, EventArgs e)
        {
            if (VideoDevice.IsRunning == true)
            {
                VideoDevice.Stop();
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            string deviceMoniker = videoDevices[1].MonikerString;

            VideoCaptureDevice videoSource = new VideoCaptureDevice(deviceMoniker);

            VideoCapabilities[] videoCapabilities = videoSource.VideoCapabilities;

            int desiredWidth = 1920;
            int desiredHeight = 1080;
            VideoCapabilities desiredResolution = videoCapabilities.FirstOrDefault(r => r.FrameSize.Width == desiredWidth && r.FrameSize.Height == desiredHeight);

            if (desiredResolution != null)
            {
                videoSource.VideoResolution = desiredResolution;
            }
            videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
            videoSource.Start();
            videoSource.SignalToStop();
        }
        private static void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap videoFrame = (Bitmap)eventArgs.Frame.Clone();
        }
    }
}

宜しくお願い致します

引用返信 編集キー/
■101752 / inTopicNo.2)  Re[1]: Webカメラ解像度変更
□投稿者/ 魔界の仮面弁士 (3620回)-(2023/04/15(Sat) 19:40:50)
2023/04/15(Sat) 20:36:20 編集(投稿者)

No101751 (MASA さん) に返信
> その後webカメラ側で解像度が変えられないことが分かり

カメラ選択や解像度指定のための画面が、
AForge にて標準で用意されています。

using (var f = new VideoCaptureDeviceForm())
{
  if (f.ShowDialog(this) == DialogResult.OK)
  {
    VideoCaptureDevice device = f.VideoDevice;
    VideoInput input = f.VideoInput;
    string moniker = f.VideoDeviceMoniker;
    Size captureSize = f.CaptureSize;
    Size snapshotSize = f.SnapshotSize;

  }
}

ちなみに画質等の設定画面は、
 VideoDevice.DisplayPropertyPage(this.Handle);
で呼び出せます。ただしこちらはカメラ ドライバー側の機能なので、
デバイスによって画面が異なります。


もちろん、こうした組み込みの設定画面に頼らず自分で解像度を直接指定することもできます。


> 解像度の変更の部分を教えて下さい
> button1_Click以降です

.Start(); 直後に .SignalToStop(); している点の意図が分かりませんが、それはさておき。

そもそもの疑問なのですが、何故今回、
void video_NewFrame をわざわざ static にしたのでしょうか?

動画ファイルを生成するなどであれば静的メソッドでも構いませんが、
PictureBox などに表示することが目的なのであれば、
void video_NewFrame を static にする必然性が見当たらないので、
void NewVideoFrame と同様にインスタンスメソッドにしておくべきです。
パフォーマンスの意味でも、静的メソッドよりインスタンスメソッドの方に
メリットがあると思いますよ。
https://ufcpp.net/study/csharp/functional/miscdelegateinternal/#static-method


それはさておき解像度についてですが、 VideoCapabilities desiredResolution 変数に対して
1920x1080 の解像度を取得できているのかどうかを確認しておきたいところです。
まずは 2K 対応のカメラであるかどうかを確認しておいてください。
VideoCapabilities[] videoCapabilities = videoSource.VideoCapabilities;
Array.ForEach(videoCapabilities, v => Debug.Print($"{v.FrameSize}, {v.BitCount}bit ({v.AverageFrameRate}fps / {v.MaximumFrameRate}fps)"));



> 宜しくお願い致します
ついでに細かい点をつらつらと。

1.【優先度:中】
 撮影中にフォームが × ボタンなどで閉じられた場合の措置が漏れています。
 撮影中はフォームを閉じられないようにするか、あるいは
 FormClosing イベント発生時にカメラを止めるようにしましょう。
 現状のコードだと、撮影状態のままフォームが閉じられた場合も、
 NewVideoFrame の呼び出しが止まらないので、問題になるかと思います。 
 それに btn_close の Click 処理が見当たらない点も気がかりです。


2.【優先度:低】
 小ネタですが、カメラ列挙時は foreach せずとも、
  comboBox_cameralist.DataSource = CaptureDevice.OfType<FilterInfo>().ToArray();
  comboBox_cameralist.DisplayMember = "Name";
  comboBox_cameralist.ValueMember = "MonikerString";
 のようにすることもできます。この場合、選択されたモニカの取得は
  VideoDevice = new VideoCaptureDevice(comboBox_cameralist.SelectedValue?.ToString());
 と書けます。DisplayMember / ValueMember はデザイン時に設定しておいても OK 。


3.【優先度:中】
 カメラ選択に対する排他処理が漏れています。
 複数のカメラ(たとえば Front/Rear など)が搭載されている環境においては、
 それぞれのカメラを同時に撮影状態にすることができるのですが、現状のコードでは
 そのいずれもが同一の PictureBox に対して描画しようとするため、このままだと
 何らかの問題を生じます(たとえば InvalidOperationException の例外など)。
 複数同時操作に対応させるなら PictureBox を複数用意するか、あるいは、
 単一カメラのみの操作なら、既存カメラの停止処理を行ってから撮影するか、もしくは
 カメラが回っている最中はカメラを切り替えられないようにするなどといった、
 対処を盛り込むべきです。


4.【優先度:高】
 No101745 でも指摘しましたが、NewFrame イベントは UI スレッドとは限りません
 (しかもそのワーカースレッドは一つでは無いため、イベント発生ごとに異なるスレッドから発せられることもあります)。
 先にも述べた通り、 InvokeRequired + Invoke 経由での操作に書き換えて、『スレッドセーフ』にしましょう。
 スレッド絡みの問題は、一見すると正常に動いているように見えるのに、放置すると、タイミングが悪いと誤動作するという、
 なんともデバッグしにくい不具合を誘発する要因にもなりえるので、早めに対処しておくべきかと。

 実際、イベント中で Debug.Print($"{InvokeRequired}"); を呼び出してみると、その値が
 true 値になっていることを確認できるかと思います。特定条件下では InvokeRequired == false になることも
 一応ありえるのですが、基本的には NewFrame イベントの中で PictureBox 等を直接操作することは避けるべきです。

 特に今後、btn_capture にて pictureBox1.Image.Clone(); を呼び出すことを検討しているのであれば猶更です。
 現状のように、Image プロパティの内容を UI スレッド以外から操作されることを許容してしまっていると、
 btn_capture で操作しようとした Image が、タイミング悪く Dispose() 済みの状態で取得されてしまった…
 などという事態になりかねないですよ。


5.【優先度:中】
 ファイル書き込みは失敗する可能があるため、bitmap.Save 処理は常に try ブロックで囲みましょう。
 容量不足、フォルダー喪失、セキュリティソフトによる予期せぬブロックなどで、
 保存処理に失敗する可能性があり得るためです。


6.【優先度:低】
 環境によっては、.Clone() した Bitmap を画面に表示する際に、その Bitmap を
 .RotateFlip メソッドで鏡面反転や回転処理を加える機構が求められることがあります。
 これは、対面カメラ(Web カメラ)などでは、左右反転させた方が撮影上の都合が良いとか、
 タブレット PC などではモニターの回転方向に追随して画像を回転させて描画した方が
 撮影者が位置調整を行いやすくなるといった、利用者への「利便性」という点においてです。
 (つまり必須という訳では無く、オプション機能という程度のものであるということ)
引用返信 編集キー/
■101784 / inTopicNo.3)  Re[2]: Webカメラ解像度変更
□投稿者/ MASA (4回)-(2023/04/19(Wed) 17:09:16)
No101752 (魔界の仮面弁士 さん) に返信
> 2023/04/15(Sat) 20:36:20 編集(投稿者)
> 
丁寧にお答えいただきありがとうございます

ご指摘頂きました閉じた場合については

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (VideoDevice != null)
            {

                if (VideoDevice.IsRunning == true)
                {
                    VideoDevice.Stop();
                }
            }
            Application.Exit();
        }
        private void btn_stop_Click(object sender, EventArgs e)
        {
            if (VideoDevice.IsRunning == true)
            {
                VideoDevice.Stop();
            }
            comboBox_cameralist.Enabled = true;
            btn_capture.Enabled = false;
            btn_start.Enabled = true;
            btn_stop.Enabled = false;
        }

このようにさせて頂きました
あと解像度の変更の事ですが自分なりに調べて

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;
using System.Net.Sockets;
using System.Net;

namespace AForgeCameraCapturePriject_05040913
{
    public partial class Form1 : Form
    {
        private FilterInfoCollection CaptureDevice;
        private VideoCaptureDevice VideoDevice;
        private VideoCaptureDevice videoSource;
        private object videoDevices;

        public object VideoDevices { get; private set; }

        public Form1()
        {
            InitializeComponent();
            getallcameralist();
            btn_close.Enabled = false;
        }

    void getallcameralist()
        {
            CaptureDevice = new FilterInfoCollection(AForge.Video.DirectShow.FilterCategory.VideoInputDevice);
            foreach (AForge.Video.DirectShow.FilterInfo Devices in CaptureDevice)
            {
                comboBox_cameralist.Items.Add(Devices.Name);
                comboBox_cameralist.SelectedIndex = 0;
            }
        }
        
        private void btn_start_Click(object sender, EventArgs e)
        {
            if (comboBox_cameralist.SelectedIndex != -1 ) 
            {
                try
                {
                    VideoDevice = new VideoCaptureDevice(CaptureDevice[comboBox_cameralist.SelectedIndex].MonikerString);
                    VideoDevice.NewFrame += new NewFrameEventHandler(NewVideoFrame);
                    VideoDevice.Start();
                    comboBox_cameralist.Enabled = false;
                    btn_capture.Enabled = true;
                    btn_stop.Enabled = true;
                    btn_close.Enabled = true;
                    btn_start.Enabled = false;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        private void btnResolution_Click_1(object sender, EventArgs e)
        {
            this.cmbResolution.Items.Clear();
            videoSource = new VideoCaptureDevice(CaptureDevice[comboBox_cameralist.SelectedIndex].MonikerString);
            foreach (var cap in videoSource.VideoCapabilities)
            {
                this.cmbResolution.Items.Add(string.Format("({0},{1})", cap.FrameSize.Width, cap.FrameSize.Height));
            }
            if (this.cmbResolution.Items.Count > 0)
            {
                this.cmbResolution.SelectedIndex = 0;
            }
        }

WEBカメラの解像度を取得する所まで行きました
あとコンボボックスで選択した解像度をWEBカメラに反映させるところで
つまづいています。何かヒントを頂けたらありがたいです
宜しくお願い致します

引用返信 編集キー/
■101786 / inTopicNo.4)  Re[3]: Webカメラ解像度変更
□投稿者/ 魔界の仮面弁士 (3625回)-(2023/04/19(Wed) 17:56:48)
No101784 (MASA さん) に返信
> private VideoCaptureDevice VideoDevice;
> private VideoCaptureDevice videoSource;

同じ型の変数が 2 つありますが、どういう使い分けなのでしょうか。
撮影するカメラも、解像度を設定するカメラも同じなのですから、
変数も一つあれば事足りると思いますよ?


> VideoDevice = new VideoCaptureDevice(CaptureDevice[comboBox_cameralist.SelectedIndex].MonikerString);
> videoSource = new VideoCaptureDevice(CaptureDevice[comboBox_cameralist.SelectedIndex].MonikerString);

ボタンを押すたびにインスタンスを再生成している理由は何でしょうか。
2 つのカメラを同時に制御したいというわけでないのですよね?


> if (VideoDevice.IsRunning == true)
こういう時は、
 if (VideoDevice.IsRunning)
で充分かも。

まぁ、人それぞれ好みがあるとは思いますが、
比較結果そのものが bool 型なので、
それをさらに比較するのは、やや冗長的かな、と。

 if (VideoDevice.IsRunning)
 if (VideoDevice.IsRunning == true)
 if ((VideoDevice.IsRunning == true) == true)
 if (VideoDevice.IsRunning == true == true)
 if (VideoDevice.IsRunning == true == true == true)



> foreach (AForge.Video.DirectShow.FilterInfo Devices in CaptureDevice)
> {
>  comboBox_cameralist.Items.Add(Devices.Name);
>  comboBox_cameralist.SelectedIndex = 0;
> }

Add するたびに毎回 SelectedIndex する必要はないのでは。
引用返信 編集キー/
■101806 / inTopicNo.5)  Re[4]: Webカメラ解像度変更
□投稿者/ MASA (5回)-(2023/04/22(Sat) 12:08:32)
No101786 (魔界の仮面弁士 さん) に返信

ありがとうございます

最初の質問で解像度の変更を色々試みてはいるのですが
なかなか変わらないのです
どこがおかしいか教えて頂ければ幸いです

using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;

namespace WindowsFormsApp63
{
    public partial class Form1 : Form
    {
        private FilterInfoCollection CaptureDevice;
        private VideoCaptureDevice VideoDevice; 

        public Form1()
        {
            InitializeComponent();

            CaptureDevice = new FilterInfoCollection(FilterCategory.VideoInputDevice);

            if (CaptureDevice.Count > 0)
            {
                VideoDevice = new VideoCaptureDevice(CaptureDevice[1].MonikerString);
                VideoDevice.NewFrame += new NewFrameEventHandler(video_NewFrame);
                VideoDevice.Start();
            }
        }
        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            using (Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone())
            {
                pictureBox.Image?.Dispose();
                pictureBox.Image = (Bitmap)eventArgs.Frame.Clone();
            }

        }
        private void button2_Click(object sender, EventArgs e)
        {
            VideoDevice.Stop();
            VideoDevice = new VideoCaptureDevice(CaptureDevice[1].MonikerString);
            VideoDevice.NewFrame += new NewFrameEventHandler(video_NewFrame);
            VideoDevice.VideoResolution = VideoDevice.VideoCapabilities.FirstOrDefault(c => c.FrameSize.Width == 1920 && c.FrameSize.Height == 1080);
            VideoDevice.Start();
        }
.........

引用返信 編集キー/
■101808 / inTopicNo.6)  Re[5]: Webカメラ解像度変更
□投稿者/ 魔界の仮面弁士 (3626回)-(2023/04/23(Sun) 13:05:08)
No101806 (MASA さん) に返信
> using (Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone())
> {
>   pictureBox.Image?.Dispose();
>   pictureBox.Image = (Bitmap)eventArgs.Frame.Clone();
> }

(1) この書き換えは無意味に見えます。
 Clone による複製を 2 回行っていますが、変数 bitmap の方は、
 一度も使われることなく捨てられていますからね。



> private void button2_Click(object sender, EventArgs e)
> {
>   VideoDevice.Stop();

(2) VideoResolution の設定は Start 前に行う必要がある、という認識は正しいです。

(3) 停止処理に Stop メソッドを使うのはやめましょう。解説文にも控えるように書かれていますよね。
 Since the method aborts background thread, its usage is highly not preferred and should be done only if there are no other options.
 The correct way of stopping camera is signaling it stop and then waiting for background thread's completion.

 UI スレッドからは、SignalToStop メソッドを呼び出して停止信号を出すだけにして、
 撮影スレッドが停止するまで待機する方が望ましいようです。

(4) 繰り返しになりますが、スレッド セーフを目指しましょう。
 元ライブラリ自体が Task ベースでは無いこともあり、使いにくい面はあるのですけれど。


以下サンプル。PictureBox (pictureBox1) と
ComboBox (comboCamera, comboVideoResolution) を貼っています。


public partial class Form1 : Form
{
  private FilterInfoCollection captureDevices;
  private VideoCaptureDevice videoDevice;

  public Form1()
  {
    InitializeComponent();
  }

  /// <summary>撮影開始</summary>
  private void StartCamera()
  {
    // カメラのインスタンスを取得
    string moniker = comboCamera.SelectedValue.ToString();
    videoDevice = new VideoCaptureDevice(moniker);

    // そのカメラの解像度情報を列挙
    var resolutions = videoDevice.VideoCapabilities.ToDictionary(
      k => k, v => $"{v.FrameSize.Width}×{v.FrameSize.Height}, {v.BitCount}bit").ToArray();
    comboVideoResolution.DataSource = resolutions;

    // 撮影開始
    videoDevice.NewFrame += VideoDevice_NewFrame;
    videoDevice.Start();
  }


  protected override void OnLoad(EventArgs e)
  {
    base.OnLoad(e);

    #region このあたりはデザイン時に設定しておけばよい
    comboCamera.DropDownStyle = ComboBoxStyle.DropDownList;
    comboVideoResolution.DropDownStyle = ComboBoxStyle.DropDownList;
    comboCamera.DisplayMember = "Name";
    comboCamera.ValueMember = "MonikerString";
    comboVideoResolution.DisplayMember = "Value";
    comboVideoResolution.ValueMember = "Key";
    #endregion

    captureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

    // カメラを列挙
    comboCamera.DataSource = captureDevices;
  }

  protected override void OnFormClosing(FormClosingEventArgs e)
  {
    // 撮影中のままフォームが破棄されると都合が悪いので、先にカメラを止めるようにする
    if (videoDevice?.IsRunning ?? false)
    {
      e.Cancel = true;  // 撮影中なら、画面の終了を一時中断する
      videoDevice.PlayingFinished += delegate
      {
        videoDevice = null;
        Invoke(new MethodInvoker(Close)); // カメラが停止したので、改めて閉じなおす
      };
      videoDevice.SignalToStop();   // 停止信号を発布
    }
    base.OnFormClosing(e);
  }

  /// <summary>カメラ選択ドロップダウンが変更されたとき</summary>
  private async void comboCamera_SelectedIndexChanged(object sender, EventArgs e)
  {
    // 撮影中なら止める
    if (videoDevice?.IsRunning ?? false)
    {
      videoDevice.SignalToStop();
      try { await Task.Run(videoDevice.WaitForStop); }
      catch (Exception) { }
      videoDevice.NewFrame -= VideoDevice_NewFrame;
    }

    // カメラのインスタンスを取得
    string moniker = comboCamera.SelectedValue.ToString();
    videoDevice = new VideoCaptureDevice(moniker);

    // そのカメラの解像度情報を列挙
    var resolutions = videoDevice.VideoCapabilities;
    comboVideoResolution.DataSource = resolutions.ToDictionary(
      k => k, v => $"{v.FrameSize.Width}×{v.FrameSize.Height}, {v.BitCount}bit").ToArray(); ;

    // 1920x1080 解像度を仮選択
    Size defaultSize = new Size(1920, 1080);
    VideoCapabilities resolution = resolutions.FirstOrDefault(v => v.FrameSize == defaultSize);

    // 選択肢に無い場合は null がセットされ、そのデバイスの既定の解像度が使われる
    videoDevice.VideoResolution = resolution;

    // 撮影開始
    videoDevice.NewFrame += VideoDevice_NewFrame;
    videoDevice.Start();
  }

  /// <summary>解像度一覧ドロップダウンが変更されたとき</summary>
  private async void comboVideoResolution_SelectedIndexChanged(object sender, EventArgs e)
  {
    // 選択されている解像度を取得
    VideoCapabilities resolution = comboVideoResolution.SelectedValue as VideoCapabilities;
    if (resolution != null && (videoDevice?.IsRunning ?? false))
    {
      // カメラを一時停止して、解像度を設定してから撮影再開
      videoDevice.SignalToStop();
      try { await Task.Run(videoDevice.WaitForStop); }
      catch (Exception) { }
      videoDevice.VideoResolution = resolution;
      videoDevice.Start();
    }
  }

  /// <summary>動画撮影中に呼ばれるイベント</summary>
  private void VideoDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
  {
    ChangeFrame((Image)eventArgs.Frame.Clone());
  }

  /// <summary>フレーム差し替え</summary>
  private void ChangeFrame(Image newImage)
  {
    if (Disposing || IsDisposed) { return; }
    if (!InvokeRequired)
    {
      Text = $"{newImage.Size}";
      pictureBox1.Image?.Dispose();
      pictureBox1.Image = newImage;
    }
    else
    {
      // 別スレッドからの呼び出しったので、UI スレッドに依頼しなおす
      Invoke(new MethodInvoker(() => ChangeFrame(newImage)));
    }
  }
}


AForge.NET でカメラを止める場合、どのスレッドで待ち合わせるべきなのか、
その停止の待ち合わせに PlayingFinished イベントを使うのが良いのか、それとも
WaitForStop メソッドを使うのか、IsRunning プロパティ監視とするのかなど、
Web 上のサンプルでも意見が分かれていて、いったい何が正解なのやら。
引用返信 編集キー/
■101822 / inTopicNo.7)  Re[6]: Webカメラ解像度変更
□投稿者/ MASA (6回)-(2023/04/26(Wed) 20:26:01)
No101808 (魔界の仮面弁士 さん) に返信

遅くなってすみません
出来ました。ありがとうございました

ついでに聞いていいでしょうか

解像度を変えると画像が大きくなったり小さくなったり
するのはpictureboxタスクのところでzoomにしておくだけで
良かったでしょうか
宜しくお願い致します
解決済み
引用返信 編集キー/
■101832 / inTopicNo.8)  Re[7]: Webカメラ解像度変更
□投稿者/ 魔界の仮面弁士 (3628回)-(2023/04/27(Thu) 18:45:41)
No101822 (MASA さん) に返信
> 解像度を変えると画像が大きくなったり小さくなったり
> するのはpictureboxタスクのところでzoomにしておくだけで
> 良かったでしょうか

picturebox は分かりますが、「タスク」が何を指すのか分かりませんでした。


SizeMode プロパティのことを「タスク」と呼んでいるとか? (流石にそれは無理があるか…)
https://dobon.net/vb/dotnet/graphics/pictureboximage.html#section3
解決済み
引用返信 編集キー/
■101873 / inTopicNo.9)  Re[8]: Webカメラ解像度変更
□投稿者/ MASA (7回)-(2023/05/03(Wed) 09:03:18)
No101832 (魔界の仮面弁士 さん) に返信

すみません。画面にかいてあるそのまま見て質問してしまいました
上手く行きました。ありがとうございました
引用返信 編集キー/
■101874 / inTopicNo.10)  Re[9]: Webカメラ解像度変更
□投稿者/ MASA (8回)-(2023/05/03(Wed) 09:04:25)
> ■No101832 (魔界の仮面弁士 さん) に返信
>
> すみません。画面にかいてあるそのまま見て質問してしまいました
> 上手く行きました。ありがとうございました
引用返信 編集キー/
■101875 / inTopicNo.11)  Re[10]: Webカメラ解像度変更
□投稿者/ MASA (9回)-(2023/05/03(Wed) 09:04:58)
>>■No101832 (魔界の仮面弁士 さん) に返信
>>
>>すみません。画面にかいてあるそのまま見て質問してしまいました
>>上手く行きました。ありがとうございました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -