小编NES*_*HOM的帖子

调整C#中的图像大小

我正在编写一个代码来调整C#中的JPG图像大小.我的代码需要大约6秒来调整20张JPG图像的大小.我想知道在C#中有没有更快的方法呢?任何改善这一点的建议都表示赞赏!

这是我现在的代码:

Bitmap bmpOrig, bmpDest, bmpOrigCopy;
foreach (string strJPGImagePath in strarrFileList)
{
bmpOrig = new Bitmap(strJPGImagePath);
bmpOrigCopy = new Bitmap(bmpOrig);
bmpOrig.Dispose();
File.Delete(strJPGImagePath);

bmpDest = new Bitmap(bmpOrigCopy, new Size(100, 200));
bmpDest.Save(strJPGImagePath, jgpEncoder, myEncoderParameters);

bmpOrigCopy.Dispose();
bmpDest.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

感谢@Guffa的解决方案.我将dispose()移出了foreach循环.更新和快速的代码是:

        Bitmap bmpDest = new Bitmap(1, 1);
        foreach (string strJPGImagePath in strarrFileList)
        {
            using (Bitmap bmpOrig = new Bitmap(strJPGImagePath))
            { 
                bmpDest = new Bitmap(bmpOrig, new Size(100, 200)); 
            }
            bmpDest.Save(strJPGImagePath, jgpEncoder, myEncoderParameters);
        }
        bmpDest.Dispose();
Run Code Online (Sandbox Code Playgroud)

c# resize bitmap

5
推荐指数
1
解决办法
1537
查看次数

在 C# 中的 for 循环中使用任务时出现 IndexOutOfRangeException 异常

我正在尝试在 for 循环中使用任务,但我遇到了非常奇怪的异常!这是我的代码:

        Task[] tasks = new Task[strarrFileList.Length];
        for (int ii = 0; ii < strarrFileList.Length; ii++)
        {
            tasks[ii] = Task.Factory.StartNew(() => mResizeImage2(ii, strarrFileList[ii], intLongSide, jgpEncoder, myEncoderParameters));
        }
        Task.WaitAll(tasks);
Run Code Online (Sandbox Code Playgroud)

这是错误:

mCPanel.exe 中出现“System.IndexOutOfRangeException”类型的异常,但未在用户代码中处理附加信息:索引超出数组范围。

所以基本上 ii 变得等于 strarrFileList.Length 这不应该!有没有人对此有解释/解决方案?

c# loops task

5
推荐指数
1
解决办法
1503
查看次数

改善圆检测

我正试图检测我的图像中的圆圈.我使用EmguCV在C#中编写了以下代码.它大部分时间都有效,但在某些情况下,它会检测到稍微偏移到一侧的较小或较大的圆圈.

这是我的代码:

        Thread.Sleep(1000);
        imgCrp.Save(DateTime.Now.ToString("yyMMddHHmmss") + ".jpg");

        imgCrpLab = imgCrp.Convert<Lab, Byte>();
        imgIsolatedCathNTipBW = new Image<Gray, Byte>(imgCrp.Size);
        CvInvoke.cvInRangeS(imgCrpLab.Split()[2], new MCvScalar(0), new MCvScalar(100), imgIsolatedCathNTipBW);

        imgCrpNoBgrnd = imgCrp.Copy(imgIsolatedCathNTipBW.Not());
        imgCrpNoBgrndGray = imgCrpNoBgrnd.Convert<Gray, Byte>().PyrUp().PyrDown();
        Thread.Sleep(1000);
        imgCrpNoBgrndGray.Save(DateTime.Now.ToString("yyMMddHHmmss") + ".jpg");

        Gray cannyThreshold = new Gray(150);
        Gray cannyThresholdLinking = new Gray(85);
        Gray circleAccumulatorThreshold = new Gray(15);

        imgCrpNoBgrndGrayCanny = imgCrpNoBgrndGray.Canny(cannyThreshold.Intensity, cannyThresholdLinking.Intensity);
        Thread.Sleep(1000);
        imgCrpNoBgrndGrayCanny.Save(DateTime.Now.ToString("yyMMddHHmmss") + ".jpg");

        circarrTip = imgCrpNoBgrndGrayCanny.HoughCircles(
            cannyThreshold,
            circleAccumulatorThreshold,
            1, //Resolution of the accumulator used to detect centers of the circles
            500, //min distance 
            15, //min radius
            42 //max …
Run Code Online (Sandbox Code Playgroud)

geometry opencv emgucv hough-transform

4
推荐指数
1
解决办法
3825
查看次数

Matlab中的角点检测

我试图找到以下图像的角落:

在此输入图像描述

我试过这段代码:

im = imread('layer2.png');
BW=im2bw(im, 100/256);
BW=~BW;
figure,imshow(BW);title('Original Image');
C = corner(BW,4);
hold on
plot(C(:,1), C(:,2), 'r.', 'MarkerSize',30);
Run Code Online (Sandbox Code Playgroud)

但它检测到错误的角落,如下图所示:

在此输入图像描述

怎么了?如何才能检测到真正的角落?

matlab image-processing

3
推荐指数
1
解决办法
4644
查看次数

网络摄像头传感器尺寸

使用校准方法(Matlab 或 OpenCV),可以找到网络摄像头的焦距。我想知道是否也可以测量网络摄像头的传感器尺寸?

谢谢

webcam matlab sensors

2
推荐指数
1
解决办法
5321
查看次数

C# 和 Outlook 之间的异常

我有一个简单的代码可以使用 C# 在 Outlook 2013 中打开撰写电子邮件。当 Outlook 未运行时,它可以正常工作,但当 Outlook 已经打开时,我收到此异常:

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll

Additional information: Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
Run Code Online (Sandbox Code Playgroud)

这是我的简单代码:

        Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
        Microsoft.Office.Interop.Outlook.MailItem mailItem = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
        mailItem.Subject = "This is the subject";
        mailItem.To = "someone@example.com";
        mailItem.Body = "This is the message.";
        mailItem.Display(true);
Run Code Online (Sandbox Code Playgroud)

我也从 Visual Studio 输出窗口得到这些抱怨我不知道的符号!:

Additional information: Retrieving the …
Run Code Online (Sandbox Code Playgroud)

c# outlook exception

1
推荐指数
1
解决办法
1045
查看次数

将控件的属性名称传递给函数

我有一个函数可以根据控件名称和输入命令更改控件的属性。

 public void SetControl(string ControlName, string Operation)
    {
        Control Control = this.Controls.Find(ControlName, true)[0];

        switch (Operation)
        {
            case "ok":
                Control.BackColor = Color.Green;
                Control.ForeColor = Color.Black;
                break;
            case "error":
                Control.BackColor = Color.Red;
                Control.ForeColor = Color.Blue;
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否还有什么方法可以传递属性名称?当然我可以做这样的事情:

if (propertyname=="ForeColor")
 {Control.ForeColor = Color.Black;}
Run Code Online (Sandbox Code Playgroud)

但我应该对我要更改的所有属性执行此操作!有没有办法根据名称查找并更改属性?

c# controls properties function

0
推荐指数
1
解决办法
643
查看次数

运行繁重方法的线程正在减慢C#中的UI

有谁知道为什么这段代码会降低用户界面的速度:

Thread trdGenerateTrajectory = new Thread(() => HeavyMethod());
trdGenerateTrajectory.Start();
trdGenerateTrajectory.Join();
Run Code Online (Sandbox Code Playgroud)

这应该是在主线程的单独线程中,我是对的吗?如果是这样,为什么运行它会减慢/冻结UL?

编辑:感谢您的评论.我删除了Join(),但它仍然冻结了UI.任何的想法?

更新:HeavyMethod()方法从我创建的Matlab DLL调用方法.dll中的方法为机器人生成操纵轨迹.我的项目是一个重型机器人项目,与许多硬件/设备进行通信.该项目有12名背景工作者和一名计时器.计时器负责更新UI及其上的所有文本/颜色/图像/ .... 到目前为止,我还没有遇到任何与后台工作者和计时器有关的问题,无论他们运行的任务有多重,我都没有看到任何延迟或停止计时器和UI更新.但是,当我在Matlab dll中调用这个特定的方法时,我看到UI的完全停止正在更新,直到方法完成.这就是我的经历:

  1. 我使用线程(上面的代码)没有运气.
  2. 然后我将方法和流程在运行方法后移动到另一个背景工作者,再次没有运气.

然后我意识到我的表单上只有一些文本框遇到了这个问题.他们是那些从同一个Matlab dll的另一个方法获取值的人.那时我才意识到这个问题与线程/后台工作者无关,而且与Matlab运行方法的方式有关.也许是单线程!?无论如何,我可能会有所帮助,如果我为这个生成轨迹的特定方法制作单独的dll,所以我创建了另一个dll,但我遇到了完全相同的问题.似乎Matlab dll一次只能运行一个方法,无论你是从不同的线程调用它们,还是从单独的dll调用它们.我相信我应该在另外的SO问题中提出这个问题,但是,在此期间,你对此有何评论?(更新:我没有收到任何回复所以我发布了一个新问题:同时从一个Matlab dll调用两个函数)

c# user-interface multithreading freeze

0
推荐指数
1
解决办法
1276
查看次数