[error] 4301#0: *9 open() "/home/ ex.html" failed (13: Permission denied)

本文分享了一位新手在学习过程中遇到的关于root和普通用户权限区别的困扰,通过前辈的指导,最终解决了由于权限设置不当导致的一系列错误。文章强调了理解root和普通用户权限差异的重要性。

关于这个问题,新手初学,也是绞尽脑汁。。最后还是在前辈的‘肩膀’上面解决的:

参考文章,详细解决!

  • 我就是第一步错误。。。。没有搞清楚root 和用户的区别。然后一致报错。
using MvCameraControl; using System; using System.Collections.Generic; using System.Threading; using System.Windows.Forms; namespace BasicDemoLineScan { public partial class Form1 : Form { readonly DeviceTLayerType enumTLayerType = DeviceTLayerType.MvGigEDevice | DeviceTLayerType.MvUsbDevice | DeviceTLayerType.MvGenTLGigEDevice | DeviceTLayerType.MvGenTLCXPDevice | DeviceTLayerType.MvGenTLCameraLinkDevice | DeviceTLayerType.MvGenTLXoFDevice; IDevice device = null; List<IDeviceInfo> deviceInfos = new List<IDeviceInfo>(); bool isGrabbing = false; Thread receiveThread = null; // ch:用于从驱动获取到的帧信息 | en:Frame info that getting image from driver IFrameOut frameForSave = null; private readonly Object lockForSaveImage = new Object(); IEnumValue triggerSelector = null; // 触发选项 IEnumValue triggerMode = null; // 触发模式 IEnumValue triggerSource = null; // 触发源 IEnumValue pixelFormat = null; // 像素格式 IEnumValue imgCompressMode = null; // HB模式 IEnumValue preampGain = null; // 模拟增益 public Form1() { InitializeComponent(); SDKSystem.Initialize(); UpdateDeviceList(); CheckForIllegalCrossThreadCalls = false; } /// <summary> /// // ch:显示错误信息 | en:Show error message /// </summary> /// <param name="message">ch:错误信息 | en: error message</param> /// <param name="errorCode">ch:错误码 | en: error code</param> private void ShowErrorMsg(string message, int errorCode) { string errorMsg; if (errorCode == 0) { errorMsg = message; } else { errorMsg = message + ": Error =" + String.Format("{0:X}", errorCode); } switch (errorCode) { case MvError.MV_E_HANDLE: errorMsg += " Error or invalid handle "; break; case MvError.MV_E_SUPPORT: errorMsg += " Not supported function "; break; case MvError.MV_E_BUFOVER: errorMsg += " Cache is full "; break; case MvError.MV_E_CALLORDER: errorMsg += " Function calling order error "; break; case MvError.MV_E_PARAMETER: errorMsg += " Incorrect parameter "; break; case MvError.MV_E_RESOURCE: errorMsg += " Applying resource failed "; break; case MvError.MV_E_NODATA: errorMsg += " No data "; break; case MvError.MV_E_PRECONDITION: errorMsg += " Precondition error, or running environment changed "; break; case MvError.MV_E_VERSION: errorMsg += " Version mismatches "; break; case MvError.MV_E_NOENOUGH_BUF: errorMsg += " Insufficient memory "; break; case MvError.MV_E_UNKNOW: errorMsg += " Unknown error "; break; case MvError.MV_E_GC_GENERIC: errorMsg += " General error "; break; case MvError.MV_E_GC_ACCESS: errorMsg += " Node accessing condition error "; break; case MvError.MV_E_ACCESS_DENIED: errorMsg += " No permission "; break; case MvError.MV_E_BUSY: errorMsg += " Device is busy, or network disconnected "; break; case MvError.MV_E_NETER: errorMsg += " Network error "; break; } MessageBox.Show(errorMsg, "PROMPT"); } /// <summary> /// ch:枚举设备 | en:Enum devices /// </summary> private void bnEnum_Click(object sender, EventArgs e) { UpdateDeviceList(); } /// <summary> /// ch:刷新设备列表 | en:Update devices list /// </summary> private void UpdateDeviceList() { // ch:枚举设备列表 | en:Enumerate Device List cmbDeviceList.Items.Clear(); //搜索相机设备,设备存在deviceInfos上 int result = DeviceEnumerator.EnumDevices(enumTLayerType, out deviceInfos); if (result != MvError.MV_OK) { ShowErrorMsg("Enumerate devices fail!", result); return; } // ch:在窗体列表中显示设备名 | en:Display device name in the form list for (int i = 0; i < deviceInfos.Count; i++) { IDeviceInfo deviceInfo = deviceInfos[i]; if (deviceInfo.UserDefinedName != "") { cmbDeviceList.Items.Add(deviceInfo.TLayerType.ToString() + ": " + deviceInfo.UserDefinedName + " (" + deviceInfo.SerialNumber + ")"); } else { cmbDeviceList.Items.Add(deviceInfo.TLayerType.ToString() + ": " + deviceInfo.ManufacturerName + " " + deviceInfo.ModelName + " (" + deviceInfo.SerialNumber + ")"); } } // ch:选择第一项 | en:Select the first item if (deviceInfos.Count > 0) { cmbDeviceList.SelectedIndex = 0; } else { ShowErrorMsg("No device", 0); } return; } /// <summary> /// ch:打开设备 | en:Open device /// </summary> private void bnOpen_Click(object sender, System.EventArgs e) { #region 打开设备 if (0 == deviceInfos.Count || -1 == cmbDeviceList.SelectedIndex) { ShowErrorMsg("No device, please enumerate device", 0); return; } // ch:获取选择的设备信息 | en:Get selected device information IDeviceInfo deviceInfo = deviceInfos[cmbDeviceList.SelectedIndex]; try { // ch:打开设备 | en:Open device device = DeviceFactory.CreateDevice(deviceInfo); } catch (Exception ex) { MessageBox.Show("Create Device fail!" + ex.Message); return; } int result = device.Open(); if (result != MvError.MV_OK) { device.Dispose(); device = null; ShowErrorMsg("Open Device fail!", result); return; } //ch: 判断是否为gige设备 | en: Determine whether it is a GigE device if (device is IGigEDevice) { //ch: 转换为gigE设备 | en: Convert to Gige device IGigEDevice gigEDevice = device as IGigEDevice; // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera) int optionPacketSize; result = gigEDevice.GetOptimalPacketSize(out optionPacketSize); if (result != MvError.MV_OK) { ShowErrorMsg("Warning: Get Packet Size failed!", result); } else { result = device.Parameters.SetIntValue("GevSCPSPacketSize", (long)optionPacketSize); if (result != MvError.MV_OK) { ShowErrorMsg("Warning: Set Packet Size failed!", result); } } } #endregion #region 设置相机参数 // ch:设置采集连续模式 | en:Set Continues Aquisition Mode //设置相机参数统一使用SetEnumValueByString方法,有两个接口(“参数名”,“参数值”) //AcquisitionMode单词为采集模式,Continuous单词为连续, device.Parameters.SetEnumValueByString("AcquisitionMode", "Continuous"); //TriggerMode单词为触发模式,参数值为Off关闭触发模式,参数值为On即打开SDK控制 device.Parameters.SetEnumValueByString("TriggerMode", "Off"); device.Parameters.SetEnumValueByString("TriggerSource","Line0"); #endregion #region 查询参数 // ch:获取参数 | en:Get parameters //相机参数统一使用GetEnumValue方法,有两个接口(“参数名”,out“返回参数值”) //以GetTriggerMode()方法为例子,其他方法查询方式雷同; GetImageCompressionMode(); GetPreampGain(); GetTriggerMode(); GetTriggerSelector(); GetTriggerSource(); GetPixelFormat(); #endregion bnGetParam_Click(null, null); // ch:控件操作 | en:Control operation btnOpen.Enabled = false; btnClose.Enabled = true; btnStartGrab.Enabled = true; btnStopGrab.Enabled = false; btnTriggerExec.Enabled = false; btnGetParam.Enabled = true; btnSetParam.Enabled = true; cmbDeviceList.Enabled = false; } /// <summary> /// ch:获取虚拟增益模式 | en:Get PreampGain /// </summary> private void GetPreampGain() { cmbPreampGain.Items.Clear(); int result = device.Parameters.GetEnumValue("PreampGain", out preampGain); if (result == MvError.MV_OK) { for (int i = 0; i < preampGain.SupportedNum; i++) { cmbPreampGain.Items.Add(preampGain.SupportEnumEntries[i].Symbolic); if (preampGain.SupportEnumEntries[i].Symbolic == preampGain.CurEnumEntry.Symbolic) { cmbPreampGain.SelectedIndex = i; } } cmbPreampGain.Enabled = true; } } /// <summary> /// ch:获取HB模式 | en:Get ImageCompressionMode /// </summary> private void GetImageCompressionMode() { cmbHBMode.Items.Clear(); int result = device.Parameters.GetEnumValue("ImageCompressionMode", out imgCompressMode); if (result == MvError.MV_OK) { for (int i = 0; i < imgCompressMode.SupportedNum; i++) { cmbHBMode.Items.Add(imgCompressMode.SupportEnumEntries[i].Symbolic); if (imgCompressMode.SupportEnumEntries[i].Symbolic == imgCompressMode.CurEnumEntry.Symbolic) { cmbHBMode.SelectedIndex = i; } } cmbHBMode.Enabled = true; } else { cmbHBMode.Enabled = false; } } /// <summary> /// ch:获取像素格式 | en:Get PixelFormat /// </summary> private void GetPixelFormat() { cmbPixelFormat.Items.Clear(); int result = device.Parameters.GetEnumValue("PixelFormat", out pixelFormat); if (result == MvError.MV_OK) { for (int i = 0; i < pixelFormat.SupportedNum; i++) { cmbPixelFormat.Items.Add(pixelFormat.SupportEnumEntries[i].Symbolic); if (pixelFormat.SupportEnumEntries[i].Symbolic == pixelFormat.CurEnumEntry.Symbolic) { cmbPixelFormat.SelectedIndex = i; } } cmbPixelFormat.Enabled = true; } } /// <summary> /// ch:获取触发选项 | en:Get TriggerSelector /// </summary> private void GetTriggerSelector() { cmbTriggerSelector.Items.Clear(); int result = device.Parameters.GetEnumValue("TriggerSelector", out triggerSelector); if (result == MvError.MV_OK) { for (int i = 0; i < triggerSelector.SupportedNum; i++) { cmbTriggerSelector.Items.Add(triggerSelector.SupportEnumEntries[i].Symbolic); if (triggerSelector.SupportEnumEntries[i].Symbolic == triggerSelector.CurEnumEntry.Symbolic) { cmbTriggerSelector.SelectedIndex = i; } } cmbTriggerSelector.Enabled = true; } } /// <summary> /// ch:获取触发模式 | en:Get TriggerMode /// </summary> private void GetTriggerMode() { cmbTriggerMode.Items.Clear(); //相机参数统一使用GetEnumValue方法,有两个接口(“参数名”,out“返回参数值”) //TriggerMode单词为触发模式,out triggerMode存储信息 int result = device.Parameters.GetEnumValue("TriggerMode", out triggerMode); if (result == MvError.MV_OK) { for (int i = 0; i < triggerMode.SupportedNum; i++) { cmbTriggerMode.Items.Add(triggerMode.SupportEnumEntries[i].Symbolic);//赋值符号给控件 if (triggerMode.SupportEnumEntries[i].Symbolic == triggerMode.CurEnumEntry.Symbolic)//判断遍历符号是否为“设置方法”设置的当前符号 { cmbTriggerMode.SelectedIndex = i;//将当前符号赋值给控件进行显示 } } cmbTriggerMode.Enabled = true; } } /// <summary> /// ch:获取触发源 | en:Get TriggerSource /// </summary> private void GetTriggerSource() { cmbTriggerSource.Items.Clear(); int result = device.Parameters.GetEnumValue("TriggerSource", out triggerSource); if (result == MvError.MV_OK) { for (int i = 0; i < triggerSource.SupportedNum; i++) { cmbTriggerSource.Items.Add(triggerSource.SupportEnumEntries[i].Symbolic); if (triggerSource.SupportEnumEntries[i].Value == triggerSource.CurEnumEntry.Value) { cmbTriggerSource.SelectedIndex = i; } } cmbTriggerSource.Enabled = true; } } /// <summary> /// ch:关闭设备 | en:Close device /// </summary> private void bnClose_Click(object sender, System.EventArgs e) { // ch:取流标志位清零 | en:Reset flow flag bit if (isGrabbing == true) { isGrabbing = false; receiveThread.Join(); } // ch:关闭设备 | en:Close Device if (device != null) { device.Close(); device.Dispose(); } // ch:控件操作 | en:Control Operation SetCtrlWhenClose(); } private void SetCtrlWhenClose() { btnOpen.Enabled = true; btnClose.Enabled = false; btnStartGrab.Enabled = false; btnStopGrab.Enabled = false; btnTriggerExec.Enabled = false; cmbDeviceList.Enabled = true; btnSaveBmp.Enabled = false; btnSaveJpg.Enabled = false; btnSaveTiff.Enabled = false; btnSavePng.Enabled = false; tbExposure.Enabled = false; btnGetParam.Enabled = false; btnSetParam.Enabled = false; cmbPixelFormat.Enabled = false; cmbHBMode.Enabled = false; cmbPreampGain.Enabled = false; cmbTriggerSource.Enabled = false; cmbTriggerSelector.Enabled = false; cmbTriggerMode.Enabled = false; tbExposure.Enabled = false; tbDigitalShift.Enabled = false; tbAcqLineRate.Enabled = false; chkLineRateEnable.Enabled = false; } /// <summary> /// ch:接收图像线程 | en:Receive image thread process /// </summary> public void ReceiveThreadProcess() { IFrameOut frameOut = null; int result = MvError.MV_OK; while (isGrabbing) { //获取图像(“在规定时间内取图”“取图成功返回信息”) result = device.StreamGrabber.GetImageBuffer(1000, out frameOut); if (result == MvError.MV_OK)//是否在1000毫秒内取图成功 { // ch:保存图像数据用于保存图像文件 | en:Save frame info for save image lock (lockForSaveImage) { try { frameForSave = frameOut.Clone() as IFrameOut; } catch (Exception e) { MessageBox.Show("IFrameOut.Clone failed, " + e.Message); return; } } // ch:渲染图像数据 | en:Display frame //接口(“显示图像的控件”“从frameOut获取图像”) device.ImageRender.DisplayOneFrame(pictureBox1.Handle, frameOut.Image); // ch:释放帧信息 | en:Free frame info device.StreamGrabber.FreeImageBuffer(frameOut); } else { if (cmbTriggerMode.SelectedText == "On") { Thread.Sleep(5); } } } } /// <summary> /// ch:开始采集 | en:Start grab /// </summary> private void bnStartGrab_Click(object sender, System.EventArgs e) { // ch:标志位置位 true | en:Set position bit true isGrabbing = true; //开启线程显示图片 receiveThread = new Thread(ReceiveThreadProcess); receiveThread.Start(); // ch:开始采集 | en:Start Grabbing int result = device.StreamGrabber.StartGrabbing(); if (result != MvError.MV_OK) { isGrabbing = false; receiveThread.Join(); ShowErrorMsg("Start Grabbing Fail!", result); return; } // ch:控件操作 | en:Control Operation SetCtrlWhenStartGrab(); } private void SetCtrlWhenStartGrab() { btnStartGrab.Enabled = false; btnStopGrab.Enabled = true; if ((cmbTriggerMode.Text == "On") && (cmbTriggerSource.Text == "Software") && isGrabbing) { btnTriggerExec.Enabled = true; } btnSaveBmp.Enabled = true; btnSaveJpg.Enabled = true; btnSaveTiff.Enabled = true; btnSavePng.Enabled = true; cmbPixelFormat.Enabled = false; cmbHBMode.Enabled = false; } /// <summary> /// ch:软触发执行一次 | en:Trigger once by software /// </summary> private void bnTriggerExec_Click(object sender, System.EventArgs e) { // ch:触发命令 | en:Trigger command int result = device.Parameters.SetCommandValue("TriggerSoftware"); if (result != MvError.MV_OK) { ShowErrorMsg("Trigger Software Fail!", result); } } /// <summary> /// ch:停止采集 | en:Stop Grab /// </summary> private void bnStopGrab_Click(object sender, System.EventArgs e) { // ch:标志位设为false | en:Set flag bit false isGrabbing = false; receiveThread.Join(); // ch:停止采集 | en:Stop Grabbing int result = device.StreamGrabber.StopGrabbing(); if (result != MvError.MV_OK) { ShowErrorMsg("Stop Grabbing Fail!", result); } // ch:控件操作 | en:Control Operation SetCtrlWhenStopGrab(); } private void SetCtrlWhenStopGrab() { btnStartGrab.Enabled = true; btnStopGrab.Enabled = false; btnTriggerExec.Enabled = false; btnSaveBmp.Enabled = false; btnSaveJpg.Enabled = false; btnSaveTiff.Enabled = false; btnSavePng.Enabled = false; cmbPixelFormat.Enabled = true; cmbHBMode.Enabled = true; } /// <summary> /// ch:保存图像 | en:Save image /// </summary> /// <param name="imageFormatInfo">ch:图像格式信息 | en:Image format info </param> /// <returns></returns> private int SaveImage(ImageFormatInfo imageFormatInfo) { if (frameForSave == null) { throw new Exception("No vaild image"); } string imagePath = "Image_w" + frameForSave.Image.Width.ToString() + "_h" + frameForSave.Image.Height.ToString() + "_fn" + frameForSave.FrameNum.ToString() + "." + imageFormatInfo.FormatType.ToString(); lock (lockForSaveImage) { return device.ImageSaver.SaveImageToFile(imagePath, frameForSave.Image, imageFormatInfo, CFAMethod.Equilibrated); } } /// <summary> /// ch:保存Bmp文件 | en:Save Bmp image /// </summary> private void bnSaveBmp_Click(object sender, System.EventArgs e) { int result; try { ImageFormatInfo imageFormatInfo = new ImageFormatInfo(); imageFormatInfo.FormatType = ImageFormatType.Bmp; result = SaveImage(imageFormatInfo); if (result != MvError.MV_OK) { ShowErrorMsg("Save Image Fail!", result); return; } else { ShowErrorMsg("Save Image Succeed!", 0); } } catch (Exception ex) { MessageBox.Show("Save Image Failed, " + ex.Message); return; } } /// <summary> /// ch:保存Jpeg文件 | en:Save Jpeg image /// </summary> private void bnSaveJpg_Click(object sender, System.EventArgs e) { int result; try { ImageFormatInfo imageFormatInfo = new ImageFormatInfo(); imageFormatInfo.FormatType = ImageFormatType.Jpeg; imageFormatInfo.JpegQuality = 80; result = SaveImage(imageFormatInfo); if (result != MvError.MV_OK) { ShowErrorMsg("Save Image Fail!", result); return; } else { ShowErrorMsg("Save Image Succeed!", 0); } } catch (Exception ex) { MessageBox.Show("Save Image Failed, " + ex.Message); return; } } /// <summary> /// ch:保存Tiff格式文件 | en:Save Tiff image /// </summary> private void bnSaveTiff_Click(object sender, System.EventArgs e) { int result; try { ImageFormatInfo imageFormatInfo = new ImageFormatInfo(); imageFormatInfo.FormatType = ImageFormatType.Tiff; result = SaveImage(imageFormatInfo); if (result != MvError.MV_OK) { ShowErrorMsg("Save Image Fail!", result); return; } else { ShowErrorMsg("Save Image Succeed!", 0); } } catch (Exception ex) { MessageBox.Show("Save Image Failed, " + ex.Message); return; } } /// <summary> /// ch:保存PNG格式文件 | en:Save PNG image /// </summary> private void bnSavePng_Click(object sender, System.EventArgs e) { int result; try { ImageFormatInfo imageFormatInfo = new ImageFormatInfo(); imageFormatInfo.FormatType = ImageFormatType.Png; result = SaveImage(imageFormatInfo); if (result != MvError.MV_OK) { ShowErrorMsg("Save Image Fail!", result); return; } else { ShowErrorMsg("Save Image Succeed!", 0); } } catch (Exception ex) { MessageBox.Show("Save Image Failed, " + ex.Message); return; } } /// <summary> /// ch:设置参数 | en:Set Parameters /// </summary> private void bnSetParam_Click(object sender, System.EventArgs e) { int result = MvError.MV_OK; // ch:设置曝光 | en:Set ExposureTime if (tbExposure.Enabled) { try { float.Parse(tbExposure.Text); device.Parameters.SetEnumValue("ExposureAuto", 0); result = device.Parameters.SetFloatValue("ExposureTime", float.Parse(tbExposure.Text)); if (result != MvError.MV_OK) { ShowErrorMsg("Set Exposure Time Fail!", result); } } catch { ShowErrorMsg("Please enter ExposureTime correct", 0); } } // ch:设置数字增益 | en:Set DigitalShift if (tbDigitalShift.Enabled) { try { float.Parse(tbDigitalShift.Text); device.Parameters.SetBoolValue("DigitalShiftEnable", true); result = device.Parameters.SetFloatValue("DigitalShift", float.Parse(tbDigitalShift.Text)); if (result != MvError.MV_OK) { ShowErrorMsg("Set Digital Shift Fail!", result); } } catch { ShowErrorMsg("Please enter DigitalShift correct", 0); } } // ch:设置行频设定值 | en:Set AcquisitionLineRate if (tbAcqLineRate.Enabled) { try { int.Parse(tbAcqLineRate.Text); result = device.Parameters.SetIntValue("AcquisitionLineRate", int.Parse(tbAcqLineRate.Text)); if (result != MvError.MV_OK) { ShowErrorMsg("Set Acquisition Line Rate Fail!", result); } } catch { ShowErrorMsg("Please enter AcquisitionLineRate correct", 0); } } } /// <summary> /// ch:获取参数 | en:Get Parameters /// </summary> private void bnGetParam_Click(object sender, System.EventArgs e) { // ch:获取曝光参数 | en:Get ExposureTime IFloatValue exposureTime = null; int result = device.Parameters.GetFloatValue("ExposureTime", out exposureTime); if (result == MvError.MV_OK) { tbExposure.Text = exposureTime.CurValue.ToString("F2"); tbExposure.Enabled = true; } // ch:获取数字增益参数 | en:Get DigitalShift IFloatValue digitalShift = null; result = device.Parameters.GetFloatValue("DigitalShift", out digitalShift); if (result == MvError.MV_OK) { tbDigitalShift.Text = digitalShift.CurValue.ToString("F2"); tbDigitalShift.Enabled = true; } // ch:获取行频使能开关 | en:Get AcquisitionLineRateEnable bool acqLineRateEnable = false; result = device.Parameters.GetBoolValue("AcquisitionLineRateEnable", out acqLineRateEnable); if (result == MvError.MV_OK) { chkLineRateEnable.Enabled = true; chkLineRateEnable.Checked = acqLineRateEnable; } // ch:获取行频设置值 | en:Get AcquisitionLineRate IIntValue acqLineRate = null; result = device.Parameters.GetIntValue("AcquisitionLineRate", out acqLineRate); if (result == MvError.MV_OK) { tbAcqLineRate.Text = acqLineRate.CurValue.ToString(); tbAcqLineRate.Enabled = true; } // ch:获取行频实际值 | en:Get ResultingLineRate IIntValue resultLineRate = null; result = device.Parameters.GetIntValue("ResultingLineRate", out resultLineRate); if (result == MvError.MV_OK) { tbResLineRate.Text = resultLineRate.CurValue.ToString(); tbResLineRate.Enabled = true; } } private void cbTriggerSelector_SelectedIndexChanged(object sender, EventArgs e) { int result = device.Parameters.SetEnumValue("TriggerSelector", triggerSelector.SupportEnumEntries[cmbTriggerSelector.SelectedIndex].Value); if (result != MvError.MV_OK) { ShowErrorMsg("Set Trigger Selector Failed", result); for (int i = 0; i < triggerSelector.SupportedNum; i++) { if (triggerSelector.SupportEnumEntries[i].Value == triggerSelector.CurEnumEntry.Value) { cmbTriggerSelector.SelectedIndex = i; return; } } } GetTriggerMode(); GetTriggerSource(); } private void cbTiggerMode_SelectedIndexChanged(object sender, EventArgs e) { int result = device.Parameters.SetEnumValue("TriggerMode", (uint)triggerMode.SupportEnumEntries[cmbTriggerMode.SelectedIndex].Value); if (result != MvError.MV_OK) { ShowErrorMsg("Set Trigger Mode Failed", result); for (int i = 0; i < triggerMode.SupportedNum; i++) { if (triggerMode.SupportEnumEntries[i].Value == triggerMode.CurEnumEntry.Value) { cmbTriggerMode.SelectedIndex = i; return; } } } GetTriggerSource(); if ((cmbTriggerMode.Text == "On" && cmbTriggerSource.Text == "Software") && isGrabbing) { btnTriggerExec.Enabled = true; } else { btnTriggerExec.Enabled = false; } } private void cbTriggerSource_SelectedIndexChanged(object sender, EventArgs e) { int result = device.Parameters.SetEnumValue("TriggerSource", triggerSource.SupportEnumEntries[cmbTriggerSource.SelectedIndex].Value); if (result != MvError.MV_OK) { ShowErrorMsg("Set Trigger Source Failed", result); for (int i = 0; i < triggerSource.SupportedNum; i++) { if (triggerSource.SupportEnumEntries[i].Value == triggerSource.CurEnumEntry.Value) { cmbTriggerSource.SelectedIndex = i; return; } } } if ((cmbTriggerMode.Text == "On" && cmbTriggerSource.Text == "Software") && isGrabbing) { btnTriggerExec.Enabled = true; } else { btnTriggerExec.Enabled = false; } } private void cbHBMode_SelectedIndexChanged(object sender, EventArgs e) { // ch:设置无损压缩模式 | en:Set ImageCompressionMode int result = device.Parameters.SetEnumValue("ImageCompressionMode", imgCompressMode.SupportEnumEntries[cmbHBMode.SelectedIndex].Value); if (result != MvError.MV_OK) { ShowErrorMsg("Set ImageCompressionMode Fail!", result); for (int i = 0; i < imgCompressMode.SupportedNum; i++) { if (imgCompressMode.SupportEnumEntries[i].Value == imgCompressMode.CurEnumEntry.Value) { cmbHBMode.SelectedIndex = i; return; } } } } private void cbPreampGain_SelectedIndexChanged(object sender, EventArgs e) { int result = device.Parameters.SetEnumValue("PreampGain", preampGain.SupportEnumEntries[cmbPreampGain.SelectedIndex].Value); if (result != MvError.MV_OK) { ShowErrorMsg("Set PreampGain Fail!", result); for (int i = 0; i < preampGain.SupportedNum; i++) { if (preampGain.SupportEnumEntries[i].Value == preampGain.CurEnumEntry.Value) { cmbPreampGain.SelectedIndex = i; return; } } } } private void chkLineRateEnable_CheckedChanged(object sender, EventArgs e) { if (chkLineRateEnable.Checked) { device.Parameters.SetBoolValue("AcquisitionLineRateEnable", true); } else { device.Parameters.SetBoolValue("AcquisitionLineRateEnable", false); } } /// <summary> /// ch:窗口关闭事件 | en: FormClosing event /// </summary> private void Form1_FormClosing(object sender, FormClosingEventArgs e) { bnClose_Click(sender, e); SDKSystem.Finalize(); } private void cmbPixelFormat_SelectionChangeCommitted(object sender, EventArgs e) { // ch:设置像素格式 | en:Set PixelFormat int result = device.Parameters.SetEnumValue("PixelFormat", pixelFormat.SupportEnumEntries[cmbPixelFormat.SelectedIndex].Value); if (result != MvError.MV_OK) { ShowErrorMsg("Set PixelFormat Fail!", result); for (int i = 0; i < pixelFormat.SupportedNum; i++) { if (pixelFormat.SupportEnumEntries[i].Value == pixelFormat.CurEnumEntry.Value) { cmbPixelFormat.SelectedIndex = i; return; } } } GetImageCompressionMode(); } private void Form1_Load(object sender, EventArgs e) { } } 此程序存在一个问题,采集图像无法显示在pictureBox1.Handle中,请帮我纠正此问题
09-20
2025-11-03 16:02:14.397 5110-5110 nativeloader com.tencent.yolov5ncnn D Load libframework-connectivity-tiramisu-jni.so using APEX ns com_android_tethering for caller /apex/com.android.tethering/javalib/framework-connectivity-t.jar: ok 2025-11-03 16:02:14.651 5110-5110 ApplicationLoaders com.tencent.yolov5ncnn D Returning zygote-cached class loader: /system/framework/android.test.base.jar 2025-11-03 16:02:14.667 5110-5110 ApplicationLoaders com.tencent.yolov5ncnn D Returning zygote-cached class loader: /system/framework/org.apache.http.legacy.jar 2025-11-03 16:02:14.784 5110-5110 nativeloader com.tencent.yolov5ncnn D Configuring clns-9 for other apk /data/app/~~xxzbu0wml8C2fUpqODMIxQ==/com.tencent.yolov5ncnn-eDiI419Dh2a_64P7Kpg05w==/base.apk. target_sdk_version=24, uses_libraries=, library_path=/data/app/~~xxzbu0wml8C2fUpqODMIxQ==/com.tencent.yolov5ncnn-eDiI419Dh2a_64P7Kpg05w==/lib/x86_64:/data/app/~~xxzbu0wml8C2fUpqODMIxQ==/com.tencent.yolov5ncnn-eDiI419Dh2a_64P7Kpg05w==/base.apk!/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/com.tencent.yolov5ncnn 2025-11-03 16:02:14.806 5110-5110 cent.yolov5ncnn com.tencent.yolov5ncnn I AssetManager2(0x70f4faefb3d8) locale list changing from [] to [en-US] 2025-11-03 16:02:14.882 5110-5110 GraphicsEnvironment com.tencent.yolov5ncnn V Currently set values for: 2025-11-03 16:02:14.882 5110-5110 GraphicsEnvironment com.tencent.yolov5ncnn V angle_gl_driver_selection_pkgs=[] 2025-11-03 16:02:14.882 5110-5110 GraphicsEnvironment com.tencent.yolov5ncnn V angle_gl_driver_selection_values=[] 2025-11-03 16:02:14.882 5110-5110 GraphicsEnvironment com.tencent.yolov5ncnn V com.tencent.yolov5ncnn is not listed in per-application setting 2025-11-03 16:02:14.882 5110-5110 GraphicsEnvironment com.tencent.yolov5ncnn V ANGLE allowlist from config: com.dreamgames.royalmatch com.dts.freefiremax com.dxx.firenow com.gramgames.mergedragons com.ludo.king com.mojang.minecraftpe com.my.defense com.nintendo.zaka com.os.airforce com.playrix.fishdomdd.gplay io.teslatech.callbreak jp.konami.prospia net.peakgames.toonblast 2025-11-03 16:02:14.882 5110-5110 GraphicsEnvironment com.tencent.yolov5ncnn V com.tencent.yolov5ncnn is not listed in ANGLE allowlist or settings, returning default 2025-11-03 16:02:14.882 5110-5110 GraphicsEnvironment com.tencent.yolov5ncnn V Neither updatable production driver nor prerelease driver is supported. 2025-11-03 16:02:14.992 5110-5125 DisplayManager com.tencent.yolov5ncnn I Choreographer implicitly registered for the refresh rate. 2025-11-03 16:02:15.064 5110-5110 cent.yolov5ncnn com.tencent.yolov5ncnn I AssetManager2(0x70f4faef5618) locale list changing from [] to [en-US] 2025-11-03 16:02:15.119 5110-5110 nativeloader com.tencent.yolov5ncnn D Load /data/app/~~xxzbu0wml8C2fUpqODMIxQ==/com.tencent.yolov5ncnn-eDiI419Dh2a_64P7Kpg05w==/base.apk!/lib/x86_64/libyolov5ncnn.so using class loader ns clns-9 (caller=/data/app/~~xxzbu0wml8C2fUpqODMIxQ==/com.tencent.yolov5ncnn-eDiI419Dh2a_64P7Kpg05w==/base.apk!classes3.dex): ok 2025-11-03 16:02:15.130 5110-5110 YoloV5Ncnn com.tencent.yolov5ncnn D JNI_OnLoad 2025-11-03 16:02:15.185 5110-5110 vulkan com.tencent.yolov5ncnn D searching for layers in &#39;/data/app/~~xxzbu0wml8C2fUpqODMIxQ==/com.tencent.yolov5ncnn-eDiI419Dh2a_64P7Kpg05w==/lib/x86_64&#39; 2025-11-03 16:02:15.186 5110-5110 vulkan com.tencent.yolov5ncnn D searching for layers in &#39;/data/app/~~xxzbu0wml8C2fUpqODMIxQ==/com.tencent.yolov5ncnn-eDiI419Dh2a_64P7Kpg05w==/base.apk!/lib/x86_64&#39; 2025-11-03 16:02:15.187 5110-5110 ncnn com.tencent.yolov5ncnn W no vulkan device 2025-11-03 16:02:15.221 5110-5125 EGL_emulation com.tencent.yolov5ncnn I Opening libGLESv1_CM_emulation.so 2025-11-03 16:02:15.222 5110-5125 EGL_emulation com.tencent.yolov5ncnn I Opening libGLESv2_emulation.so 2025-11-03 16:02:15.256 5110-5110 ashmem com.tencent.yolov5ncnn E Pinning is deprecated since Android Q. Please use trim or other methods. 2025-11-03 16:02:15.258 5110-5125 HWUI com.tencent.yolov5ncnn W Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 2025-11-03 16:02:15.258 5110-5125 HWUI com.tencent.yolov5ncnn W Failed to initialize 101010-2 format, error = EGL_SUCCESS 2025-11-03 16:02:15.310 5110-5110 DesktopModeFlags com.tencent.yolov5ncnn D Toggle override initialized to: OVERRIDE_UNSET 2025-11-03 16:02:15.330 5110-5110 HWUI com.tencent.yolov5ncnn W Image decoding logging dropped! 2025-11-03 16:02:15.347 5110-5110 HWUI com.tencent.yolov5ncnn W Image decoding logging dropped! 2025-11-03 16:02:15.367 5110-5110 HWUI com.tencent.yolov5ncnn W Image decoding logging dropped! 2025-11-03 16:02:16.084 5110-5110 HWUI com.tencent.yolov5ncnn W Unknown dataspace 0 2025-11-03 16:02:16.498 5110-5110 System.err com.tencent.yolov5ncnn W java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) 2025-11-03 16:02:16.502 5110-5110 System.err com.tencent.yolov5ncnn W at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:162) 2025-11-03 16:02:16.503 5110-5110 System.err com.tencent.yolov5ncnn W at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:814) 2025-11-03 16:02:16.503 5110-5110 System.err com.tencent.yolov5ncnn W at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2045) 2025-11-03 16:02:16.504 5110-5110 System.err com.tencent.yolov5ncnn W at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1860) 2025-11-03 16:02:16.504 5110-5110 System.err com.tencent.yolov5ncnn W at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1775) 2025-11-03 16:02:16.509 5110-5110 System.err com.tencent.yolov5ncnn W at com.tencent.yolov5ncnn.MainActivity$1.surfaceCreated(MainActivity.java:133) 2025-11-03 16:02:16.510 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.SurfaceView.updateSurface(SurfaceView.java:1369) 2025-11-03 16:02:16.510 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.SurfaceView.lambda$new$0(SurfaceView.java:238) 2025-11-03 16:02:16.510 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.SurfaceView.$r8$lambda$NfZyM_TG8F8lqzaOVZ7noREFjzU(Unknown Source:0) 2025-11-03 16:02:16.518 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.SurfaceView$$ExternalSyntheticLambda1.onPreDraw(D8$$SyntheticClass:0) 2025-11-03 16:02:16.518 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1179) 2025-11-03 16:02:16.518 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4417) 2025-11-03 16:02:16.518 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3076) 2025-11-03 16:02:16.518 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10643) 2025-11-03 16:02:16.518 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1570) 2025-11-03 16:02:16.519 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1579) 2025-11-03 16:02:16.519 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.Choreographer.doCallbacks(Choreographer.java:1179) 2025-11-03 16:02:16.519 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.Choreographer.doFrame(Choreographer.java:1108) 2025-11-03 16:02:16.519 5110-5110 System.err com.tencent.yolov5ncnn W at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1553) 2025-11-03 16:02:16.519 5110-5110 System.err com.tencent.yolov5ncnn W at android.os.Handler.handleCallback(Handler.java:995) 2025-11-03 16:02:16.530 5110-5110 System.err com.tencent.yolov5ncnn W at android.os.Handler.dispatchMessage(Handler.java:103) 2025-11-03 16:02:16.530 5110-5110 System.err com.tencent.yolov5ncnn W at android.os.Looper.loopOnce(Looper.java:248) 2025-11-03 16:02:16.530 5110-5110 System.err com.tencent.yolov5ncnn W at android.os.Looper.loop(Looper.java:338) 2025-11-03 16:02:16.530 5110-5110 System.err com.tencent.yolov5ncnn W at android.app.ActivityThread.main(ActivityThread.java:9067) 2025-11-03 16:02:16.530 5110-5110 System.err com.tencent.yolov5ncnn W at java.lang.reflect.Method.invoke(Native Method) 2025-11-03 16:02:16.530 5110-5110 System.err com.tencent.yolov5ncnn W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) 2025-11-03 16:02:16.547 5110-5110 System.err com.tencent.yolov5ncnn W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) 2025-11-03 16:02:16.547 5110-5110 System.out com.tencent.yolov5ncnn I surfaceCreated!!!!!!!!!!!!!!! 2025-11-03 16:02:16.579 5110-5110 System.out com.tencent.yolov5ncnn I surfaceChanged!!!!!!!!!!!!!!! 2025-11-03 16:02:16.783 5110-5110 Choreographer com.tencent.yolov5ncnn I Skipped 37 frames! The application may be doing too much work on its main thread. 2025-11-03 16:02:17.056 5110-5110 InsetsController com.tencent.yolov5ncnn D hide(ime(), fromIme=false) 2025-11-03 16:02:17.057 5110-5110 ImeTracker com.tencent.yolov5ncnn I com.tencent.yolov5ncnn:c4a8beb5: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN 2025-11-03 16:02:18.637 5110-5115 cent.yolov5ncnn com.tencent.yolov5ncnn I Compiler allocated 5042KB to compile void android.view.ViewRootImpl.performTraversals()
最新发布
11-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值