Exemple #1
0
bool E_ColorReverse::Init(ImgFile_Ptr pFile)
{
	IImgLayer_weakPtr _sl = pFile->GetSelectLayer();
	if (_sl.expired()) {
		OutputError::Alert(IE_ERROR_SELECT_LAYER_DONT_EXIST);
		return false;
	}

	IImgLayer_Ptr sl = _sl.lock();
	if (sl->GetLayerType() != IE_LAYER_TYPE::NORMAL_LAYER) {
		OutputError::Alert(IE_ERROR_CANT_EDIT_LAYER);
		return false;
	}
	m_pEditLayer = std::dynamic_pointer_cast<ImgLayer>(sl);

	RECT rect, mask_rect;
	m_pEditLayer->GetLayerRect(&rect);

	//マスクの範囲取得
	if (pFile->GetMaskState() == IE_MASK_STATE_ID::INVALID) {
		m_mask = NULL;
	}
	else {
		pFile->GetMaskRect(&mask_rect);
		//範囲を計算
		AndRect(&rect, &mask_rect, &rect);

		//マスク切り出し
		IplImage* tmp_mask = cvCreateImage(
			cvSize(rect.right - rect.left, rect.bottom - rect.top),
			IPL_DEPTH_8U,
			1);

		pFile->CopyFileMask(
			rect.left,
			rect.top,
			rect.right - rect.left,
			rect.bottom - rect.top,
			tmp_mask,
			0, 0);

		m_mask = tmp_mask;
	}

	CvSize sizeOfImage;
	sizeOfImage.width = rect.right - rect.left;
	sizeOfImage.height = rect.bottom - rect.top;

	m_pEditLayerHandle = (EditLayerHandle*)pFile->CreateImgFileHandle( IFH_EDIT_LAYER );
	m_pEditLayerHandle->SetHandleName( DISPLAY_NAME );
	pFile->DoImgFileHandle( m_pEditLayerHandle );

	m_pEditNode = m_pEditLayerHandle->CreateEditNode(&rect);
	m_pEditNode->blt_rect = rect;

	return true;
}
Exemple #2
0
bool AddCopyLayerHandle::Do(ImgFile_weakPtr wpFile)
{
	ImgFile_Ptr pFile = wpFile.lock();

	m_addLayer = m_addLayer_lock = CreateIEImgLayer( pFile );

	IImgLayer_weakPtr wlayer = pFile->GetSelectLayer();
	if (wlayer.expired()) {
		OutputError::PushLog(LOG_LEVEL::_ERROR, "AddCopyLayerHandle::Do() select layer is expired");
		return false;
	}

	IImgLayer_Ptr layer = wlayer.lock();
	if(layer->GetLayerType() != IE_LAYER_TYPE::NORMAL_LAYER){
		OutputError::PushLog(LOG_LEVEL::_ERROR, "AddCopyLayerHandle::Do() select layer is not normal layer");
		return false;
	}

	if(m_copyLayer.lock() == NULL){
		m_copyLayer = std::dynamic_pointer_cast<ImgLayer>(layer);
	}

	const_ImgLayer_Ptr copy_layer = m_copyLayer.lock();

	copy_layer->CopyImgLayer( m_addLayer_lock );
	
	char layer_name[MAX_IMG_LAYER_NAME];
	copy_layer->GetName(layer_name);
	sprintf(layer_name,  "%s�̃R�s�[", layer_name);
	m_addLayer_lock->SetName(layer_name);
	m_addLayer_lock->SetLayerSynthFourCC( LayerSynthesizerMG::GetDefaultLayerSynthFourCC() );

	pFile->AddLayer(m_addLayer_lock);
	m_is_added_layer = true;
	m_addLayer_lock = NULL;

	LPUPDATE_DATA data = pFile->CreateUpdateData();
	data->isAll = true;
	pFile->PushUpdateData(data);
	return true;
}
Exemple #3
0
bool LevelCorrection::Init(ImgEdit* pEdit)
{
	m_is_gamma_dlg = false;
	m_is_max_level_dlg = false;
	m_is_min_level_dlg = false;
	m_is_max_out_dlg = false;
	m_is_min_out_dlg = false;

	m_gamma = 0.5;
	m_max_level = 255;
	m_min_level = 0;
	m_max_out_val = 255;
	m_min_out_val = 0;

	for(int i=0; i<4; i++){
		m_histogram_img[i] = cvCreateImage(cvSize(LC_HISTOGRAM_W, LC_HISTOGRAM_H), IPL_DEPTH_8U, 3);
		cvSet(m_histogram_img[i], cvScalar(255, 255, 255));
	}
	m_level_sld_img = cvCreateImage(cvSize(LC_LEVEL_SLD_W, LC_LEVEL_SLD_H), IPL_DEPTH_8U, 3);
	m_output_sld_img = cvCreateImage(cvSize(LC_OUTPUT_SLD_W, LC_OUTPUT_SLD_H), IPL_DEPTH_8U, 3);
	m_BGRA_LUT = cvCreateMat(1, 256, CV_8UC4);

	m_pEditFile = pEdit->GetActiveFile();
	if(!m_pEditFile) return false;

	IImgLayer_weakPtr _sl = m_pEditFile->GetSelectLayer();
	if (_sl.expired()) {
		OutputError::Alert(IE_ERROR_SELECT_LAYER_DONT_EXIST);
		return false;
	}

	IImgLayer_Ptr sl = _sl.lock();
	if (sl->GetLayerType() != IE_LAYER_TYPE::NORMAL_LAYER) {
		OutputError::Alert(IE_ERROR_CANT_EDIT_LAYER);
		return false;
	}
	ImgLayer_Ptr l = std::dynamic_pointer_cast<ImgLayer>(sl);

	//選択マスクの範囲を取得
	bool is_invalid_mask = (m_pEditFile->GetMaskState() == IE_MASK_STATE_ID::INVALID);
	if (is_invalid_mask) {
		CvSize size = m_pEditFile->GetImgSize();
		m_mask_rect.top = m_mask_rect.left = 0;
		m_mask_rect.right = size.width;
		m_mask_rect.bottom = size.height;
	}
	else {
		m_pEditFile->GetMaskRect(&m_mask_rect);
	}

	RECT layer_rect;
	l->GetLayerRect(&layer_rect);
	//
	AndRect(&m_mask_rect, &layer_rect, &m_mask_rect);

	int width = m_mask_rect.right - m_mask_rect.left;
	int height = m_mask_rect.bottom - m_mask_rect.top;

	m_pEditLayerHandle = (EditLayerHandle*) m_pEditFile->CreateImgFileHandle( IFH_EDIT_LAYER );
	m_pEditLayerHandle->SetHandleName( DISPLAY_NAME );
	m_pEditFile->DoImgFileHandle( m_pEditLayerHandle );

	m_pEditNode = m_pEditLayerHandle->CreateEditNode(&m_mask_rect);

	//get undo image
	l->CopyLayerImage(
		&(m_pEditNode->undo_img),
		0,
		0,
		m_mask_rect.left,
		m_mask_rect.top,
		m_mask_rect.right - m_mask_rect.left,
		m_mask_rect.bottom - m_mask_rect.top);

	//
	if(is_invalid_mask){
		CvSize size = m_pEditNode->edit_img.GetSize();
		m_pEditNode->edit_img.RectFillAlpha(
			0,
			0,
			size.width,
			size.height,
			255);
	}
	else{
		m_pEditNode->edit_img.RectFillAlpha(
			m_mask_rect.left,
			m_mask_rect.top,
			m_mask_rect.right - m_mask_rect.left,
			m_mask_rect.bottom - m_mask_rect.top,
			255,
			NULL);
	}


	//create histogram img
	int bin_w;
	int hist_size = HISTOGRAM_MAX - HISTOGRAM_MIN;
	float max_value = 0;
	float range_0[] = { HISTOGRAM_MIN, HISTOGRAM_MAX };
	float *ranges[] = { range_0 };
	IplImage* ch_img[4];
	for(int i=0; i<4; i++){
		ch_img[i] = cvCreateImage(
			cvSize(m_mask_rect.right - m_mask_rect.left, m_mask_rect.bottom - m_mask_rect.top),
			IPL_DEPTH_8U,
			1);
	}
	CvHistogram* ch_hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1);
	m_pEditNode->undo_img.Split(
		m_mask_rect.left, m_mask_rect.top,
		m_mask_rect.right - m_mask_rect.left,
		m_mask_rect.bottom - m_mask_rect.top,
		ch_img[0], ch_img[1], ch_img[2], NULL);

	for(int i=0; i<3; i++){
		cvCalcHist(&(ch_img[i]), ch_hist, 0, NULL);
		cvGetMinMaxHistValue(ch_hist, 0, &max_value, 0, 0);
		cvScale (ch_hist->bins, ch_hist->bins, ((double) LC_HISTOGRAM_H) / max_value, 0);
		bin_w = cvRound((double) LC_HISTOGRAM_W/hist_size);
		for(int j=0; j<hist_size; j++){
			cvRectangle(
				m_histogram_img[i],
				cvPoint(j*bin_w, m_histogram_img[i]->height),
				cvPoint((j+1)*bin_w, m_histogram_img[i]->height - cvRound(cvGetReal1D(ch_hist->bins, j))),
				cvScalar(0, 0, 0),
				-1, 8, 0);
		}
	}

	RebuildLevelDlg();
	RebuildOutputDlg();

	return true;
}
Exemple #4
0
bool E_LaughingMan::Init(ImgFile_Ptr pFile)
{
	m_faces = NULL;
	IImgLayer_weakPtr _sl = pFile->GetSelectLayer();
	if(!_sl.expired()){
		OutputError::Alert(IE_ERROR_SELECT_LAYER_DONT_EXIST);
		return false;
	}

	IImgLayer_Ptr sl = _sl.lock();
	if(sl->GetLayerType() != IE_LAYER_TYPE::NORMAL_LAYER){
		OutputError::Alert(IE_ERROR_CANT_EDIT_LAYER);
		return false;
	}
	m_pEditLayer = std::dynamic_pointer_cast<ImgLayer>(sl);

	RECT rect, mask_rect;
	m_pEditLayer->GetLayerRect(&rect);

	//マスクの範囲取得
	if(pFile->GetMaskState() != IE_MASK_STATE_ID::INVALID){
		pFile->GetMaskRect(&mask_rect);
		//範囲を計算
		AndRect(&rect, &mask_rect, &rect);
	}

	CvSize sizeOfImage;
	sizeOfImage.width = rect.right - rect.left;
	sizeOfImage.height = rect.bottom - rect.top;

	m_pEditLayerHandle = (EditLayerHandle*)pFile->CreateImgFileHandle( IFH_EDIT_LAYER );
	m_pEditLayerHandle->SetHandleName( DISPLAY_NAME );
	pFile->DoImgFileHandle( m_pEditLayerHandle );

	m_pEditNode = m_pEditLayerHandle->CreateEditNode(&rect);
	m_pEditNode->blt_rect = rect;

	IplImage* bgraImg;
	IplImage* editImg;
	IplImage* grayImg;
	IplImage* editedImg;

	bgraImg = cvCreateImage(
		cvSize(rect.right - rect.left, rect.bottom - rect.top),
		IPL_DEPTH_8U,
		4);
	editImg = cvCreateImage(
		cvSize(rect.right - rect.left, rect.bottom - rect.top),
		IPL_DEPTH_8U,
		3);
	grayImg = cvCreateImage(
		cvSize(rect.right - rect.left, rect.bottom - rect.top),
		IPL_DEPTH_8U,
		1);
	editedImg = cvCreateImage(
		cvSize(rect.right - rect.left, rect.bottom - rect.top),
		IPL_DEPTH_8U,
		3);

	//レイヤーから有効範囲部分のデータを取得
	m_pEditLayer->CopyLayerImage(
		bgraImg,
		0,
		0,
		rect.left,
		rect.top,
		rect.right - rect.left,
		rect.bottom - rect.top);

	ucvCvtColor(bgraImg, editImg, CV_BGRA2BGR);
	cvCvtColor(editImg, grayImg, CV_BGRA2GRAY);
	cvEqualizeHist(grayImg, grayImg);

	m_cascade = (CvHaarClassifierCascade*)cvLoad(CASCADE_FILE_PATH, 0, 0, 0);
	if (m_cascade == NULL) {
		return false;
	}

	m_storage = cvCreateMemStorage(0);;
	cvClearMemStorage(m_storage);

    m_faces = cvHaarDetectObjects(grayImg, m_cascade, m_storage,
                                       1.1, 2, 0,//CV_HAAR_DO_CANNY_PRUNING,
                                       cvSize(30, 30) );


	cvReleaseImage(&bgraImg);
	cvReleaseImage(&editImg);
    cvReleaseImage(&grayImg);
    cvReleaseImage(&editedImg);

	return true;
}