Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ wxWidgets(C+;+;)无法执行许多wxDC.DrawPoint()操作_C++_Visual C++_Wxwidgets - Fatal编程技术网

C++ wxWidgets(C+;+;)无法执行许多wxDC.DrawPoint()操作

C++ wxWidgets(C+;+;)无法执行许多wxDC.DrawPoint()操作,c++,visual-c++,wxwidgets,C++,Visual C++,Wxwidgets,我将非常感谢任何形式的帮助。我在Windows7上通过wxDevC++使用wxWidgets开发了一个应用程序。我有一个函数,它可以进行一些计算,并且应该可以生成一个2D彩色绘图来显示采集到的数据。看起来是这样的: void draw2DColourPlot (wxDC *dc) { wxBitmap bmp; bmp.Create (800, 400); wxMemoryDC *memDC = new wxMemoryDC ( bmp ); ofstream

我将非常感谢任何形式的帮助。我在Windows7上通过wxDevC++使用wxWidgets开发了一个应用程序。我有一个函数,它可以进行一些计算,并且应该可以生成一个2D彩色绘图来显示采集到的数据。看起来是这样的:

void draw2DColourPlot (wxDC *dc)
{
    wxBitmap bmp;
    bmp.Create (800, 400);

    wxMemoryDC *memDC = new wxMemoryDC ( bmp );

    ofstream dbgStr ( "interpolating.txt", std :: osftream :: out );

    int progress = 0;

    for ( int i = 0; i < 800; ++i )
    {
        for ( int j = 0; j < 400; ++j )
        {
            unsigned char r, g, b,;

            // calculate values of r, g, b

            memDC -> SetPen ( wxPen ( wxColor (r,g,b), 1 ) );
            memDC -> DrawPoint ( i,j );

            dbgStr << "Point ( " << i << ", " << j << " ) calculated" << '\n';
            ++progress;

            updateProgressBar ( progress );
        }
    }

    dc -> SetPen ( wxPen ( wxColor ( 255, 255, 255 ), 1 ) );
    dc -> Clear ();
    dc -> Blit ( 0, 0, 800, 400, memDC, 0, 0 );

    return;
}
void draw2dcolorplot(wxDC*dc)
{
wxBitmap-bmp;
创建(800400);
wxMemoryDC*memDC=新的wxMemoryDC(bmp);
流dbgStr(“interpoling.txt”,std::osftream::out);
int progress=0;
对于(int i=0;i<800;++i)
{
对于(int j=0;j<400;++j)
{
无符号字符r,g,b,;
//计算r、g、b的值
memDC->SetPen(wxPen(wxColor(r,g,b),1));
memDC->支点(i,j);

dbgStr我认为您的问题是由于内存/资源泄漏:您在堆上分配
wxMemoryDC
,但从不删除它,泄漏的DC尤其糟糕,因为它们在Windows下是有限的资源,因此如果泄漏太多,您将无法再创建任何DC。要修复此问题,只需在堆栈上分配它。


其次,虽然你所做的没有错,但它的效率非常低。为了简单的改进,请设置像素,然后立即将其转换为
wxBitmap
。为了更有效的方法,请使用直接在位图中设置像素。这将比你所做的快得多。

我认为你的问题是由于内存/资源泄漏s:您在堆上分配
wxMemoryDC
,但从不删除它,泄漏的DC尤其糟糕,因为它们在Windows下是有限的资源,因此如果泄漏太多,您将无法再创建任何DC。要解决此问题,只需在堆栈上分配它即可


其次,虽然你所做的没有错,但它的效率非常低。为了简单的改进,请设置像素,然后立即将其转换为
wxBitmap
。为了更有效的方法,请使用直接在位图中设置像素。这将比你所做的快得多。

我认为你的问题是由于内存/资源泄漏s:您在堆上分配
wxMemoryDC
,但从不删除它,泄漏的DC尤其糟糕,因为它们在Windows下是有限的资源,因此如果泄漏太多,您将无法再创建任何DC。要解决此问题,只需在堆栈上分配它即可


其次,虽然你所做的没有错,但它的效率非常低。为了简单的改进,请设置像素,然后立即将其转换为
wxBitmap
。为了更有效的方法,请使用直接在位图中设置像素。这将比你所做的快得多。

我认为你的问题是由于内存/资源泄漏s:您在堆上分配
wxMemoryDC
,但从不删除它,泄漏的DC尤其糟糕,因为它们在Windows下是有限的资源,因此如果泄漏太多,您将无法再创建任何DC。要解决此问题,只需在堆栈上分配它即可

第二,虽然你所做的没有错,但它的效率非常低。为了进行简单的改进,请设置像素,然后立即将其转换为
wxBitmap
。为了更有效的方法,请使用直接在位图中设置像素。这将比你所做的快得多