小编Giu*_*ini的帖子

试验显示从Picturebox上的相机检索的位图

在我的代码中,我从一个带有指向非托管对象的指针的相机中检索帧,对它进行一些计算然后我在一个图片框控件上显示它.
在我进一步介绍这个应用程序的所有细节之前,我想确保这个过程的基本代码是好的.特别是我想:
- 尽量减少执行时间并避免不必要的操作,例如复制超出必要的图像.我想只保留必要的操作
- 了解每一帧的计算过程中的延迟是否会对图像的显示方式产生不利影响(即,如果它没有按照我的预期打印)或者某些图像被跳过
- 防止出现更严重的错误,例如由于内存或线程管理或图像显示.
为此,我设置了几个实验代码行(如下),但我无法解释我发现的结果.如果你有OpenCv的可执行文件,你可以自己尝试一下.

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;

public partial class FormX : Form
{
private delegate void setImageCallback();
Bitmap _bmp;
Bitmap _bmp_draw;
bool _exit;
double _x;
IntPtr _ImgBuffer;

bool buffercopy;
bool copyBitmap;
bool refresh;

public FormX()
{
    InitializeComponent();
    _x = 10.1;

    // set experimemental parameters
    buffercopy = false;
    copyBitmap = false;
    refresh = true;
}

private void buttonStart_Click(object sender, EventArgs e)
{
    Thread camThread = new …
Run Code Online (Sandbox Code Playgroud)

c# camera opencv bitmap picturebox

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

从辅助线程更新控制:调用性能是否至关重要?

我正在开发的一个c#应用程序主要包括对来自摄像头的图像执行操作并将其打印在图片框上.它有一个用c ++编写的库,它从网络摄像头(imgcam)中检索图像,然后复制它们(imgcam_copy),然后将它们传送给请求它们的托管代码.反过来,应用程序的托管部分由一个辅助线程组成,该辅助线程执行一个while循环,该循环从非托管库中获取图像并将它们打印到图片框.

一切正常,一切都是最精致的部分,即从非托管代码到托管代码的动态资源管理对我来说似乎很清楚,我知道我正在做什么(至少我希望如此),但问题在于编写使线程正常工作所需的代码.事实上,即使在浏览网页数小时之后,我仍有很多事情不清楚.

我不得不用UI线程打印图像,所以我必须依赖Invoke.

    delegate void setImageCallback(Image img);
    private void showFrame(Image img)
    {
        if (pboxCam.InvokeRequired)
        {
            this.Invoke(new setImageCallback(showFrame), img);
        }
        else
        {
            pboxCam.Image = img;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有很多问题:

1)调用昂贵的操作?我已经做了很多努力来减少主要操作在图像上的执行时间,在显示结果时浪费部分收益会令人失望.

2)您是否认为同步使用Invoke或异步BeginInvoke +图像副本更好?

3)将Image作为函数参数但是作为类的成员访问它是否有帮助?

    private delegate void setImageCallback();
    private void showFrame()
    {
        if (pboxCam.InvokeRequired)
        {
            this.Invoke(new setImageCallback(showFrame));
        }
        else
        {
            pboxCam.Image = cm.bitmap;
        }
    }
Run Code Online (Sandbox Code Playgroud)

4)也许你不会分享我对性能的担心,但我想知道你是否分享了线程安全性.UI线程只是想在非UI线程复制它时显示图像,依赖异步机制真的不安全吗?

c# controls multithreading invoke begininvoke

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

隐藏片段的生命周期

我想了解 Android 中 Activity 生命周期和片段生命周期之间的交互,所以我决定开始一个新项目并从这个页面复制代码。
然后我想,为了提高我的理解力,在平板电脑上测试它,切换它的方向并看看它会发生什么(尽管它可能不是为此而设计的)会很有用。通过 logcat,我跟踪了在活动和国家/地区片段上触发的主要事件,例如在 Activity Oncreate 中我写道:

Log.d("TAG", "Activity: 1.onCreate");
Run Code Online (Sandbox Code Playgroud)

这是我从纵向视图开始然后旋转时得到的结果:

标签:活动:1.onCreate
标签:活动:2.onStart
标签:## ContryFrag:1.onAttach
标签:## ContryFrag:2.onCreateView
标签:## ContryFrag:3.onStart
标签:活动:3.onResume
标签: ## ContryFrag: 4.onResume
TAG: Activity: -3.onPause
TAG: ## ContryFrag: -4.onPause
TAG: Activity: -2.onStop
TAG: ## ContryFrag: -3.onStop
TAG: Activity: -1。 onDestroy
TAG:## ContryFrag:-2.onDestroyView
TAG:## ContryFrag:-1.onDetach
TAG:Activity:1.onCreate
TAG:## ContryFrag:1.onAttach
TAG:## ContryFrag:1.onAttach
TAG:## ContryFrag:2.onCreateView
标签:活动:2.onStart
标签:## ContryFrag:2.onCreateView
标签:## ContryFrag:3.onStart
标签:## ContryFrag:3.onStart
标签:活动:3.onResume
标签:## ContryFrag:4.onResume
标签:## ContryFrag:4 .onResume

似乎通过纵向视图中的 FragmentManager 添加的片段在旋转后仍然重新创建,尽管它之前被分离了。恢复它的事件链会再次被跟踪,即使它不会被显示。
你能帮我理解这里发生了什么吗?

编辑

当我检查片段是否为 isInLayout()

Log.d("TAG", "## …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments

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

删除c向量的int向量数组

我宣布:

vector<int> * part = new vector<int>[indmap];
Run Code Online (Sandbox Code Playgroud)

好吧,我知道:"你为什么不申报矢量向量?".下次我会这样做,但现在我想了解更多关于我无法解决的向量的问题.

现在我想释放所有资源,我该做什么?

delete[] part;  
Run Code Online (Sandbox Code Playgroud)

但在删除数组之前,我该怎么做才能删除所有的矢量对象?

c++

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