void MoveSelectImage::MoveImage(LPINPUT_DATA lpd, LPPOINT beforPt) { ImgFile *f = m_pImgEdit->GetActiveFile(); if(f){ int shiftX = lpd->x - beforPt->x; int shiftY = lpd->y - beforPt->y; ImgLayer *l = f->GetSelectLayer(); if(!l){ IEMessageBox("レイヤーが選択されていません。"); } const IplImageExt *ImgExt = l->GetDrawImage(); IplImage* mask = f->GetSelectMask(); move_X += shiftX; move_Y += shiftY; RECT newRc; newRc.top = beforRc.top + shiftY; newRc.bottom = beforRc.bottom + shiftY; newRc.left = beforRc.left + shiftX; newRc.right = beforRc.right + shiftX; // RECT rc; OrRect(&beforRc, &newRc, &rc); //画像の移動 m_editNode->to_rect = newRc; //mask zero clear cvSet(mask, cvScalar(0)); //マスクの移動 for(int y=0; y < move_mask->height; y++){ for(int x=0; x < move_mask->width; x++){ SetMaskDataPos(mask, x + move_X + maskRc.left, y + move_Y + maskRc.top, GetMaskDataPos(move_mask, x, y)); } } //画像の更新 UPDATE_DATA data; data.isAll = false; data.rect = rc; data.update_flag = UPDATE_FLAG::UPDATE_SELECT_LAYER_ALL_NODE; f->PushUpdateData(&data); beforRc = newRc; } }
bool ImgLayer::Update(const LPRECT enable_lprc, LPRECT updated_lprc) { if (m_pUpdateDataForeGrnd_List->empty()) { return false; } UPDATE_DATA udLayer; bool isLayerRect = false; udLayer.isAll = false; //更新情報の縮小化 ResourceLock( IE_LAYER_RESOURCE_ID::UPDATE_DATA_QUEUE ); LPUpdateData_List::iterator itr = m_pUpdateDataForeGrnd_List->begin(); for (; itr != m_pUpdateDataForeGrnd_List->end(); itr++) { bool isAll = (*itr)->isAll; switch ((*itr)->update_flag) { case UPDATE_FLAG::UPDATE_LAYER_IMAGE: if (isAll) {//全体更新 udLayer.isAll = isAll; } else if (udLayer.isAll == false) {//部分更新 if (isLayerRect == false) {//範囲の初期値がないなら udLayer.rect = (*itr)->rect; isLayerRect = true; } else {//範囲がすでに存在しているなら OrRect(&((*itr)->rect), &(udLayer.rect), &(udLayer.rect)); } } break; case UPDATE_FLAG::NO_UPDATE: break; default: OutputError::PushLog( LOG_LEVEL::_WARN, "ImgLayer::Update() unknown update_flag"); break; } //最大範囲の更新だったら抜ける。 if ((*itr)->update_flag == UPDATE_FLAG::UPDATE_LAYER_IMAGE && isAll) { break; } } ResourceUnlock( IE_LAYER_RESOURCE_ID::UPDATE_DATA_QUEUE ); if (udLayer.isAll) { udLayer.rect = m_LayerRect; isLayerRect = true; } if (enable_lprc) { AndRect(&(udLayer.rect), enable_lprc, &(udLayer.rect)); } //update if (isLayerRect) { UpdateEditNode(&udLayer.rect); } (*updated_lprc) = udLayer.rect; return IImgLayer::Update(enable_lprc, updated_lprc); }