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; }
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; }