/* * 用于对图像数据的处理 * */ JNIEXPORT jint JNICALL Java_com_nova_novapro_MainActivity_TransImage (JNIEnv *env, jobject obj) { char* source = "/sdcard/capture/1.bmp"; char* dest = "/sdcard/capture/dest1.bmp"; int ret; int arrage; unsigned char* tmpBuffer; unsigned char* locationMark; RegionInfo regionInfo; regionInfo.xres = 32; regionInfo.yres = 16; int pic_size = picInfo.xres * picInfo.yres * picInfo.bpp; LOGD("pic_size=%d\n",pic_size); //为tmpBuffer分配内存 tmpBuffer = (unsigned char*)malloc(pic_size); if(tmpBuffer == NULL){ LOGD("malloc date error!"); } //将bmp图像中的数据读取到tmpbuffer中 ret = ReadBmp2Buffer(source,dest,&picInfo,tmpBuffer); //进行一个RGB到灰度值的转换 ret = RGB2GREY(&picInfo,tmpBuffer); //获取图像的二值化阈值 arrage = GetThreshold(&picInfo,tmpBuffer); LOGD("Threshold=%d\n",arrage); //将图片中小于arrage的数据设置为0 二值化 Thresholding(arrage,&picInfo,tmpBuffer); //从图像中心开始对图像进行定位操作 ret = locataImage(&picInfo,tmpBuffer,®ionInfo); //将date数据保存到bmp中 ret = saveDate2BMP(&picInfo,tmpBuffer,dest); free(tmpBuffer); return ret; }
bool SelectNodesOP::OnDraw() const { if (DrawRectangleOP::OnDraw()) return true; if (m_node_selection.empty()) return false; CU_VEC<sm::vec2> nodes; int count = 0; for (size_t i = 0, n = m_node_selection.size(); i < n; ++i) count += m_node_selection[i]->selectedNodes.size(); nodes.reserve(count); for (size_t i = 0, n = m_node_selection.size(); i < n; ++i) { auto& selectedNodes = m_node_selection[i]->selectedNodes; copy(selectedNodes.begin(), selectedNodes.end(), back_inserter(nodes)); } s2::RVG::SetColor(pt2::Color(204, 102, 102)); s2::RVG::Circles(nullptr, nodes, GetThreshold(), true); return false; }
void QCmdParser::ParseDataDomain( QByteArray &data, QString& strInfo, qint8& nIndex ) { // data.length( ) >= 4 qint32 nDomainLen = 4; if ( nDomainLen > data.length( ) ) { return; } qint32 nDI = data[ 0 ]; nDI |= ( data[ 1 ] << 8 ); nDI |= ( data[ 2 ] << 16 ); nDI |= ( data[ 3 ] << 24 ); data.remove( 0, nDomainLen ); nDomainLen = data.length( ); strInfo = ""; switch ( nDI ) { case 0x04000300 : nIndex = 0; break; case 0x0400030C : // ƵÉÁ¹âÃô¿ØÖÆ GeLedtIlluminance( data, strInfo ); nIndex = 1; break; case 0x04000301 : // ÎÂ¶È GetLedTemperature( data, strInfo ); nIndex = 3; break; case 0x04000302 : // µÆ¹¤×÷״̬£¨00 =ƵÉÁ£»01=ÉÁ¹â£©Ä£Ê½ GetLedWorkState( data, strInfo ); nIndex = 4; break; case 0x04000303 : // ƵÉÁ´¥·¢·½Ê½£¨00=ÉÏÉýÑØ´¥·¢£»01=ϽµÑØ´¥·¢£»02=¸úËæģʽ£©Í¬²½ GetLedFreqTriggerMode( data, strInfo ); nIndex = 5; break; case 0x04000304 : // Êä³öÂö¿í0£¨°Ù·Ö±ÈÏÔʾ£©ÆµÉÁʱ¼ä GetLedFreqTime( data, strInfo ); nIndex = 7; break; case 0x04000305 : // Êä³öÂö¿í1£¨°Ù·Ö±ÈÏÔʾ£©ÉÁ¹âʱ¼ä GetLedFlashTime( data, strInfo ); nIndex = 8; break; case 0x04000306 : // Êä³öÂö¿í2£¨°Ù·Ö±ÈÏÔʾ£©ÆµÉÁÁÁ¶È GetLedFreqBrightness( data, strInfo ); nIndex = 9; break; case 0x04000307 : // Êä³öÂö¿í3£¨°Ù·Ö±ÈÏÔʾ£©ÉÁ¹âÁÁ¶È GetLedFlashBrightness( data, strInfo ); nIndex = 10; break; case 0x04000308 : // ƵÉÁƵÂÊ GetLedFrequency( data, strInfo ); nIndex = 13; break; case 0x04000309 : // LEDµÆ¹¤×÷µçѹ GetLedWorkVoltage( data, strInfo ); nIndex = 14; break; case 0x0400030A : // Íⲿ´¥·¢ÐźÅ״̬£¨00= Õý³££»01 = Òì³££© GetLedExternalTriggerSignalState( data, strInfo ); nIndex = 15; break; case 0x0400030B : // ÉÁ¹â´¥·¢·½Ê½£¨00=ÉÏÉýÑØ´¥·¢£»01=ϽµÑØ´¥·¢£»02=¸úËæģʽ£©Í¬²½ GetLedFlashTriggerMode( data, strInfo ); nIndex = 6; break; case 0x0400030E : // ƵÉÁ¹âÃô·§Öµ GetThreshold( data, strInfo ); nIndex = 11; break; case 0x0400030F : // ÉÁ¹â¹âÃô·§Öµ GetThreshold( data, strInfo ); nIndex = 12; break; case 0x0400030D : // ÉÁ¹â¹âÃô¿ØÖÆ GeLedtIlluminance( data, strInfo ); nIndex = 2; break; case 0x04000310 : // ֡Ƶ¿ØÖÆ GetFrameFreqControl( data, strInfo ); nIndex = 16; break; } }
bool SelectNodesOP::OnMouseLeftDown(int x, int y) { sm::vec2 pos = m_stage->TransPosScrToProj(x, y); ChainSelectedNodes* selected = NULL; m_shape_impl->TraverseShapes(PosQueryVisitor(pos, &selected), ee::DT_VISIBLE); if (selected) { if (m_stage->GetKeyState(WXK_CONTROL)) { bool isExist = false; for (size_t i = 0, n = m_node_selection.size(); i < n && !isExist; ++i) { ChainSelectedNodes* chainNodes = m_node_selection[i]; if (chainNodes->polyline != selected->polyline) continue; for (size_t j = 0, m = chainNodes->selectedNodes.size(); j < m && !isExist; ++j) { if (sm::dis_pos_to_pos(pos, chainNodes->selectedNodes[j]) < GetThreshold()) { chainNodes->selectedNodes.erase(chainNodes->selectedNodes.begin() + j); if (chainNodes->selectedNodes.empty()) m_node_selection.erase(m_node_selection.begin() + i); isExist = true; } } } if (!isExist) m_node_selection.push_back(selected); else delete selected; } else { bool isExist = false; for (size_t i = 0, n = m_node_selection.size(); i < n && !isExist; ++i) { ChainSelectedNodes* chainNodes = m_node_selection[i]; if (chainNodes->polyline != selected->polyline) continue; for (size_t j = 0, m = chainNodes->selectedNodes.size(); j < m && !isExist; ++j) { if (sm::dis_pos_to_pos(pos, chainNodes->selectedNodes[j]) < GetThreshold()) isExist = true; } } if (!isExist) { ClearSelectedNodes(); m_node_selection.push_back(selected); } else delete selected; } m_first_pos.MakeInvalid(); } else { DrawRectangleOP::OnMouseLeftDown(x, y); m_first_pos = pos; if (!m_stage->GetKeyState(WXK_CONTROL)) ClearSelectedNodes(); } return false; }