int main(int argc, char** argv) { Image screen_image; ScreenImage Screen; Screen.Init(); ScreenArea ScreenArea; char esc; int* cood=ScreenArea.TakeArea(); Rect Corte(cood[0],cood[1],cood[2],cood[3]); while(esc!='s') { //pega imagem da tela screen_image.SetData(Screen.ScreenShot(),"Tela",WINDOW_NORMAL); //screen_image.ScaleImg(1.0f); Mat result=screen_image.img(Corte); imshow("Result",result); namedWindow("Result",WINDOW_NORMAL); esc=screen_image.Show(); //O buffer do screen_image precisa ser limpo após tratamento com a imagem Screen.Flush(); } return 0; }
void PolycodeScreenEditor::handleDroppedFile(OSFileEntry file, Number x, Number y) { ScreenEntity *newEntity = NULL; if(file.extension == "png") { ScreenImage *newImage = new ScreenImage(file.fullPath); newImage->setPositionMode(ScreenEntity::POSITION_CENTER); baseEntity->addChild(newImage); newImage->setPosition(x-baseEntity->getPosition2D().x,y-baseEntity->getPosition2D().y); newEntity = newImage; newImage->processInputEvents = true; } if(newEntity) { newEntity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN); newEntity->blockMouseInput = true; } }
HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) : EventHandler() { core = new POLYCODE_CORE(view, 640,480,false,false,0,0,90); CoreServices::getInstance()->getResourceManager()->addArchive("Resources/default.pak"); CoreServices::getInstance()->getResourceManager()->addDirResource("default", false); Screen *screen = new Screen(); for(Number i=0; i < 10; i++) { ScreenImage *image = new ScreenImage("Resources/polycode_logo.png"); screen->addChild(image); image->setPosition(160+(42*i), 230); image->setPositionMode(ScreenEntity::POSITION_CENTER); image->setRotation(45*i); image->setScale(1.0-(0.1*i),1.0-(0.1*i)); } }
BOOL Game::start(DWORD currentTime) { Bmp8BitFileReader reader; itsGameSelectImages = new SimpleArray(4); ScreenImage *image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"game1select.bmp",NULL); itsGameSelectImages->addElement(image); image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"game2select.bmp",NULL); itsGameSelectImages->addElement(image); image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"game3select.bmp",NULL); itsGameSelectImages->addElement(image); image = new ScreenImage(); image->init(theDirectDrawObject,&reader,"moreselect.bmp",NULL); itsGameSelectImages->addElement(image); itsCurrentlySelectedGame = 0; theEventDispatcher.init(); itsSoundPlayer = new SoundPlayer(itsSoundManager); itsCurrentState = GAMESTATE_PREGAME; itsInstructionMessageTimerID = theEventDispatcher.setTimer(this,3500); isDisplayingInstructions = FALSE; DDCOLORKEY colorKey; colorKey.dwColorSpaceHighValue = ScreenImage::theTransparencyColor; colorKey.dwColorSpaceLowValue = ScreenImage::theTransparencyColor; itsInstructionMessage.init(theDirectDrawObject,&reader,"instructions.bmp",&colorKey); itsWorld = NULL; return TRUE; }
PolycodeFrame::PolycodeFrame() : ScreenEntity() { globalFrame = this; processInputEvents = true; willHideModal = false; showingConsole = true; modalChild = NULL; welcomeEntity = new ScreenEntity(); welcomeEntity->processInputEvents = true; addChild(welcomeEntity); welcomeImage = new ScreenImage("Images/welcome.png"); welcomeEntity->addChild(welcomeImage); welcomeEntity->snapToPixels = true; newProjectButton = new UIButton("Create A New Project!", 220); newProjectButton->setPosition(230,80); newProjectButton->addEventListener(this, UIEvent::CLICK_EVENT); examplesButton = new UIButton("Browse Example Projects!", 220); examplesButton->setPosition(460,80); examplesButton->addEventListener(this, UIEvent::CLICK_EVENT); welcomeEntity->addChild(newProjectButton); welcomeEntity->addChild(examplesButton); mainSizer = new UIHSizer(100,100,200,true); mainSizer->setPosition(0, 45); addChild(mainSizer); consoleSize = 200; consoleSizer = new UIVSizer(100,100,200, false); mainSizer->addRightChild(consoleSizer); projectBrowser = new PolycodeProjectBrowser(); mainSizer->addLeftChild(projectBrowser); editorHolder = new EditorHolder(); consoleSizer->addTopChild(editorHolder); console = new PolycodeConsole(); consoleSizer->addBottomChild(console); projectBrowser->treeContainer->getRootNode()->addEventListener(this, UITreeEvent::DRAG_START_EVENT); topBarBg = new ScreenShape(ScreenShape::SHAPE_RECT, 2,2); topBarBg->setColorInt(21, 18, 17, 255); topBarBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT); topBarBg->processInputEvents = true; topBarBg->blockMouseInput = true; addChild(topBarBg); logo = new ScreenImage("Images/barlogo.png"); addChild(logo); playButton = new UIImageButton("Images/play_button.png"); addChild(playButton); playButton->setPosition(10,4); stopButton = new UIImageButton("Images/stop_button.png"); addChild(stopButton); stopButton->setPosition(10,4); currentProjectTitle = new ScreenLabel("", 32, "section"); addChild(currentProjectTitle); currentProjectTitle->color.a = 0.4; currentProjectTitle->setPosition(70, 0); currentFileSelector = new UIComboBox(globalMenu, 300); currentFileSelector->addEventListener(this, UIEvent::CHANGE_EVENT); addChild(currentFileSelector); resizer = new ScreenImage("Images/corner_resize.png"); addChild(resizer); resizer->setColor(0,0,0,0.4); modalBlocker = new ScreenShape(ScreenShape::SHAPE_RECT, 10,10); modalBlocker->setColor(0,0,0,0.4); modalBlocker->setPositionMode(ScreenEntity::POSITION_TOPLEFT); modalBlocker->enabled = false; modalBlocker->blockMouseInput = true; modalBlocker->processInputEvents = true; addChild(modalBlocker); assetBrowser = new AssetBrowser(); assetBrowser->visible = false; newProjectWindow = new NewProjectWindow(); newProjectWindow->visible = false; exampleBrowserWindow = new ExampleBrowserWindow(); exampleBrowserWindow->visible = false; newFileWindow = new NewFileWindow(); newFileWindow->visible = false; exportProjectWindow = new ExportProjectWindow(); exportProjectWindow->visible = false; textInputPopup = new TextInputPopup(); textInputPopup->visible = false; yesNoPopup = new YesNoPopup(); yesNoPopup->visible = false; yesNoCancelPopup = new YesNoCancelPopup(); yesNoCancelPopup->visible = false; aboutWindow = new UIWindow("", 800, 440); aboutWindow->closeOnEscape = true; ScreenImage *aboutImage = new ScreenImage("Images/about.png"); aboutWindow->addChild(aboutImage); aboutImage->setPosition(20, 40); aboutWindow->visible = false; aboutOKButton = new UIButton("OK", 100); aboutWindow->addChild(aboutOKButton); aboutOKButton->setPosition(700, 420); aboutOKButton->addEventListener(this, UIEvent::CLICK_EVENT); ScreenLabel *versionLabel = new ScreenLabel("version 0.8.2", 12, "mono"); aboutWindow->addChild(versionLabel); versionLabel->setPosition(20, 430); versionLabel->color.a = 0.4; isDragging = false; dragLabel = new ScreenLabel("NONE", 11, "sans"); dragLabel->setPosition(0,-15); dragEntity = new ScreenEntity(); dragEntity->addChild(dragLabel); addChild(dragEntity); dragEntity->visible = false; CoreServices::getInstance()->getCore()->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEUP); CoreServices::getInstance()->getCore()->getInput()->addEventListener(this, InputEvent::EVENT_MOUSEMOVE); curveEditor = new CurveEditor(); addChild(curveEditor); curveEditor->setPosition(200,100); curveEditor->visible = false; curveEditor->enabled = false; globalColorPicker = new UIColorPicker(); globalColorPicker->setPosition(300,300); addChild(globalColorPicker); modalRoot = new UIElement(); addChild(modalRoot); fileDialogBlocker = new ScreenShape(ScreenShape::SHAPE_RECT, 100, 100); fileDialogBlocker->setPositionMode(ScreenEntity::POSITION_TOPLEFT); addChild(fileDialogBlocker); fileDialogBlocker->setColor(0.0, 0.0, 0.0, 0.5); fileDialogBlocker->processInputEvents = true; fileDialogBlocker->blockMouseInput = true; fileDialogBlocker->visible = false; fileDialogBlocker->enabled = false; fileBrowserRoot = new UIElement(); addChild(fileBrowserRoot); fileDialog = NULL; }
vector<FindResult> Vision::find(ScreenImage simg, Pattern ptn) { // SYSTEMTIME begin, end; // GetSystemTime(&begin); Mat screenImage = simg.getMat(); vector<FindResult> results; if (ptn.bAll()){ results = getFindResults(screenImage, ptn, true, ptn.getSimilarity()); if (ptn.getOrdering() == TOPDOWN){ sort(results.begin(), results.end(), sort_by_y_asc); }else if (ptn.getOrdering() == BOTTOMUP){ sort(results.begin(), results.end(), sort_by_y_dsc); }else if (ptn.getOrdering() == LEFTRIGHT){ sort(results.begin(), results.end(), sort_by_x_asc); }else if (ptn.getOrdering() == RIGHTLEFT){ sort(results.begin(), results.end(), sort_by_x_dsc); } }else{ if (ptn.where() != ANYWHERE){ results = getFindResults(screenImage, ptn, true, ptn.getSimilarity()); cout << "found " << results.size() << " matches." << endl; if (!results.empty()){ // Filter Results FindResult r = results[0]; for (int i=1; i<results.size(); ++i){ FindResult& ri = results[i]; if ((ptn.where() == TOPMOST && ri.y < r.y) || (ptn.where() == BOTTOMMOST && ri.y > r.y) || (ptn.where() == LEFTMOST && ri.x < r.x) || (ptn.where() == RIGHTMOST && ri.x > r.x)) r = ri; } results.clear(); results.push_back(r); } } else { results = getFindResults(screenImage, ptn, false, ptn.getSimilarity()); } } vector<FindResult> final_results; int n = min((int)results.size(), (int)ptn.getLimit()); for (int i=0; i< n; ++i){ final_results.push_back(results[i]); } // GetSystemTime(&end); // WORD elapsed_ms = (end.wSecond - begin.wSecond)*1000+(end.wMilliseconds - begin.wMilliseconds); // cout << elapsed_ms << " ms." << endl; return final_results; }
vector<Match> Region::doFind(Pattern target) { dout << "[Region::doFind] Searching in (" << xo+x << "," << yo+y << ")-(" << xo+x+w << "," << yo+y+h << ")" << endl; ScreenImage simg = capture(); FindInput* fi; if (target.isText()) fi = new FindInput(simg.getMat(), TARGET_TYPE_TEXT, target.getText()); else fi = new FindInput(simg.getMat(), TARGET_TYPE_IMAGE, target.getImageURL()); FindInput& input = *fi; input.setFindAll(target.bAll()); input.setLimit(target.getLimit()); input.setSimilarity(target.getSimilarity()); if (!target.bAll() && target.where() != ANYWHERE){ input.setFindAll(true); } vector<FindResult> results = Vision::find(input); delete fi; if (target.getOrdering() == TOPDOWN){ sort(results.begin(), results.end(), sort_by_y_asc); }else if (target.getOrdering() == BOTTOMUP){ sort(results.begin(), results.end(), sort_by_y_dsc); }else if (target.getOrdering() == LEFTRIGHT){ sort(results.begin(), results.end(), sort_by_x_asc); }else if (target.getOrdering() == RIGHTLEFT){ sort(results.begin(), results.end(), sort_by_x_dsc); } if (!target.bAll() && target.where() != ANYWHERE){ if (!results.empty()){ // Filter Results FindResult r = results[0]; for (int i=1; i<results.size(); ++i){ FindResult& ri = results[i]; if ((target.where() == TOPMOST && ri.y < r.y) || (target.where() == BOTTOMMOST && ri.y > r.y) || (target.where() == LEFTMOST && ri.x < r.x) || (target.where() == RIGHTMOST && ri.x > r.x)) r = ri; } results.clear(); results.push_back(r); } } vector<Match> matches; int n = min((int)results.size(), (int)target.getLimit()); for (int i=0; i< n; ++i){ FindResult& r = results[i]; Match match(inner(r.x,r.y,r.w,r.h),r.score); matches.push_back(match); } if (!matches.empty()){ SikuliUI::sikuliUI->handleMatchFound(*this, target, matches); setLastMatch(matches[0]); setLastMatches(matches); } // TODO: setTargetOffset //match.setTargetOffset(ptn.getTargetOffset()); return matches; }
BOOL Game::initSurfaces(HWND hwnd,HINSTANCE hinstance) { DDSURFACEDESC surfaceDesc; // This is cheesy, but I'm not sure how to deal with it for right now ScreenImage bgImage; Bmp8BitFileReader reader; bgImage.init(theDirectDrawObject,&reader,"bg.bmp"); memset(&surfaceDesc,0,sizeof(surfaceDesc)); surfaceDesc.dwSize = sizeof(surfaceDesc); surfaceDesc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; surfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX; surfaceDesc.dwBackBufferCount = 1; if ( SUCCEEDED(theDirectDrawObject->CreateSurface(&surfaceDesc,&thePrimarySurface,NULL)) ) { assert(theBitDepth == 8); PALETTEENTRY palette[256]; bgImage.getPalette()->GetEntries(0,0,256,palette); PALETTEENTRY dimmedPalette[256]; for (UINT i=0;i<256;i++) { dimmedPalette[i].peBlue = (palette[i].peBlue / 3) * 2; dimmedPalette[i].peRed = (palette[i].peRed / 3) * 2; dimmedPalette[i].peGreen = (palette[i].peGreen / 3) * 2; } if ( (SUCCEEDED(theDirectDrawObject->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, palette,&thePalette,NULL)) ) && (SUCCEEDED(theDirectDrawObject->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, dimmedPalette,&theDimmedPalette,NULL)) ) ) { thePrimarySurface->SetPalette(thePalette); DDSCAPS surfaceCaps; memset(&surfaceCaps,0,sizeof(surfaceCaps)); surfaceCaps.dwCaps = DDSCAPS_BACKBUFFER; if ( SUCCEEDED(thePrimarySurface->GetAttachedSurface(&surfaceCaps,&theBackbuffer)) ) { if (SUCCEEDED(theDirectDrawObject->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE, palette,&theBackbufferPalette,NULL) )) { theBackbuffer->SetPalette(theBackbufferPalette); if (SUCCEEDED(theDirectDrawObject->CreateClipper(NULL,&theClipper,NULL))) { if (SUCCEEDED(theClipper->SetHWnd(NULL,hwnd))) { if (SUCCEEDED(theBackbuffer->SetClipper(theClipper))) { bgImage.copyDataToSurface(thePrimarySurface); bgImage.copyDataToSurface(theBackbuffer); return TRUE; } else { Logger::error("Couldn't set clipper on the backbuffer"); } } else { Logger::error("Couldn't set HWND on the clipper"); } } else { Logger::error("Couldn't create the clipper"); } } else { Logger::error("Couldn't create a palette!"); } } else { Logger::error("Couldn't get attached surface from primary surface"); } } else { Logger::error("Couldn't create the palette"); } } else { Logger::error("Couldn't create primary surface"); } return FALSE; }