Exemple #1
0
wxImage wxGISRasterRGBRenderer::Scale(unsigned char* pData, int nOrigX, int nOrigY, double rOrigX, double rOrigY, int nDestX, int nDestY, double rDeltaX, double rDeltaY, wxGISEnumDrawQuality Quality, ITrackCancel* pTrackCancel)
{
 //   //simple way
 //   wxImage ResultImage(nOrigX, nOrigY, pData);
	//ResultImage = ResultImage.Scale(nDestX, nDestY, nQuality);
 //   return ResultImage;

    wxImage ResultImage(nDestX, nDestY, false);
    unsigned char* pDestData = ResultImage.GetData();
    //multithreaded
    int CPUCount(2); //check cpu count
    std::vector<wxRasterDrawThread*> threadarray;
    int nPartSize = nDestY / CPUCount;
    int nBegY(0), nEndY;
    for(int i = 0; i < CPUCount; i++)
    {        
        if(i == CPUCount - 1)
            nEndY = nDestY;
        else
            nEndY = nPartSize * (i + 1);

        unsigned char* pDestInputData = pDestData  + (nDestX * nBegY * 3);
        wxRasterDrawThread *thread = new wxRasterDrawThread(pData, pDestInputData, nOrigX, nOrigY, rOrigX, rOrigY, nDestX, nDestY, rDeltaX, rDeltaY, Quality, pTrackCancel, nBegY, nEndY);
        thread->Create();
        thread->Run();
        threadarray.push_back(thread);
        nBegY = nEndY/* + 1*/;
    }

    for(size_t i = 0; i < threadarray.size(); i++)
    {
        wgDELETE(threadarray[i], Wait());
    }
    return ResultImage;
}
Exemple #2
0
bool wxGISNetworkService::Stop(void)
{

	for(size_t i = 0; i < m_NetworkPluginArray.size(); i++)
		wgDELETE(m_NetworkPluginArray[i], Stop());

	for(ConnIT it = m_NetworkConnectionMap.begin(); it != m_NetworkConnectionMap.end(); ++it)
		if(it->second)
			it->second->Disconnect();

	//clear messages 
	ClearMessageQueue();

    //2. Stop out thread
    if(m_pMsgOutThread)
        m_pMsgOutThread->Delete();

	wxLogMessage(_("wxGISNetworkService: Service stopped"));
    return true;
}