Example #1
0
BOOL CHistogramDlg::OnCommand( WPARAM wParam, LPARAM lParam )
{
	int id = LOWORD(wParam);					//unpack the message
	WORD codeNotify = HIWORD(wParam);
	HWND hControl = (HWND) lParam;

	int i, val;
	

	switch (id)
	{
		case IDC_CHANNELS:
			i=ChannelsCombo_Handle(id, codeNotify);
			if (!i)
				break;
			m_wChannel = i;
			set_histo_channel();
		break;
	
		case IDC_HISTOGRAM:
			// value changed
			if (WITHIN(codeNotify, HTN_CHANGED_FIRST, HTN_CHANGED_LAST))
				i = codeNotify-HTN_CHANGED_FIRST;
			else if (WITHIN(codeNotify, HTN_CHANGING_FIRST, HTN_CHANGING_LAST))
				i = codeNotify-HTN_CHANGING_FIRST;
			else if (codeNotify = HTN_BROWSE)
			{
				val = Histo_GetBrowse(hControl);
				histo_browse(val);
				break;
			}	
			else
				break;
			val = Histo_GetMark(hControl, i);
			histo_browse(val);
			histo_change_mark(i, val);
		break;

		case IDC_TAGS:
			// value changed
			if (WITHIN(codeNotify, TN_CHANGED_FIRST, TN_CHANGED_LAST))
				i = codeNotify-TN_CHANGED_FIRST;
			else if (WITHIN(codeNotify, TN_CHANGING_FIRST, TN_CHANGING_LAST))
				i = codeNotify-TN_CHANGING_FIRST;
			else
				break;
			val = Tag_GetMark(hControl, i);
			histo_browse(val);
			histo_change_mark(i, val);
		break;

   		default:
		break;
   }
return CWnd::OnCommand(wParam, lParam);
}
Example #2
0
//		Coordinates the tag control and the histo control for the 
//		histogram dialog.  
//		Updates readouts for H,M&S
void CHistogramDlg::histo_change_mark(int nMark, int val)
{

	HWND hHisto, hTag;
	int i;
	int Marks[HISTOMARKS];
	HWND hDlg = GetSafeHwnd();
	
	hHisto = ::GetDlgItem(hDlg, IDC_HISTOGRAM);
	
	// get the marks
	for (i=0;i<HISTOMARKS;i++)
		Marks[i] = Histo_GetMark(hHisto, i);
	
	// set value and adjust others
	if (nMark == 0)
	{
		Marks[0] = val;
		if (Marks[1] < Marks[0])
			Marks[1] = Marks[0];
	}
	else if (nMark == 1)
	{
		Marks[1] = val;
		if (Marks[1] < Marks[0])
			Marks[0] = Marks[1];
	}
	
	// update anything that needs it
	hTag = ::GetDlgItem(hDlg, IDC_TAGS);
	for (i=0;i<HISTOMARKS;i++)
	{
		if (Marks[i] != Histo_GetMark(hHisto,i))
			Histo_SetMark(hHisto,i, Marks[i], NO);
		if (Marks[i] != Tag_GetMark(hTag,i))
			Tag_SetMark(hTag,i, Marks[i], NO);
	}
	
	// set HMS readouts
	histo_set_HMSvalues();
}
Example #3
0
//		Sets the HMS readouts for the histo dialog based on the histogram control!
void CHistogramDlg::histo_set_HMSvalues()
{
	HWND hHisto;
	LPDWORD lpHisto;
	BOOL bInv;
	LONG lTotal;
	int iHisto;
	int i,j, start, end;
	int marks[HISTOMARKS];
	LONG sums[HISTOMARKS+1];
	double percents[HISTOMARKS+1];
	LONG sum;
	int add;
	char szDouble[30];
	HWND hDlg = GetSafeHwnd();

	lpHisto = get_histo(m_lpHistos, m_wChannel, &bInv, &iHisto);
	if (!lpHisto)
		return;
	lTotal = m_lTotals[iHisto];
	
	hHisto = ::GetDlgItem(hDlg, IDC_HISTOGRAM);
	
	// get the marks
	for (i=0;i<HISTOMARKS;i++)
	{
		marks[i] = Histo_GetMark(hHisto, i);
	}
	
	// get the three sums
	end = bInv ? 255:0;
	add = bInv ? -1:1;
	for (i=0;i<=HISTOMARKS;i++)
	{
		start = end;
		if (i >= HISTOMARKS)
			end = bInv ? 0:255;
		else
			end = bInv ? (255-marks[i]):marks[i];
		sum = 0L;
		for (j=start;j*add<end*add;j += add)
			sum += lpHisto[j];
		sums[i] = sum;
	}
	// scale if needed
	if (lTotal > 0x100000)
	{
		lTotal >>= 8L;
		for (i=0;i<=HISTOMARKS;i++)
			sums[i] >>= 8L;
	}
Example #4
0
//************************************************************************
//		change_mark
// PARAMETERS:
//					int nMark- which mark (0 for highlights etc)
//					int val- New value.
//					int inval- the 'readout' value of the given mark (INT_MAX for none)
//							Currently used only for midtone
// DESCRIPTION:
//				Sets the mark, updates other marks to keep them valid.
//				Sets and redraws all appropriate controls.
//				Updates the map.
//************************************************************************
void CToneBalanceDlg::change_mark(LPQUARTERSTRUCT lpData, int nMark, int val, int inval)
//************************************************************************
{
	HWND hHisto, hTag;
	int i;
	BOOL Bool;
	int Marks[3];
	HWND hDlg = GetSafeHwnd();
	
	// set value and adjust others
	Marks[0] = lpData->iShadow;
	Marks[2] = lpData->iHighlight;
	if (m_bUseMidPer)
		Marks[1] = Marks[0] + (LONG)lpData->MidtonePer*(Marks[2]-Marks[0])/255;
	else
		Marks[1] = lpData->iMidtone;
	if (nMark == 0)
	{
		Marks[0] = lpData->iShadow = val;
		if (Marks[2] < Marks[0])
			Marks[2] = Marks[0];
		if (m_bUseMidPer)
			Marks[1] = Marks[0] + (LONG)lpData->MidtonePer*(Marks[2]-Marks[0])/255;
		else if (Marks[1] < Marks[0])
			Marks[1] = Marks[0];
	}
	else if (nMark == 2)
	{
		Marks[2] = lpData->iHighlight = val;
		if (Marks[0] > Marks[2])
			Marks[0] = Marks[2];
		if (m_bUseMidPer)
			Marks[1] = Marks[0] + (LONG)lpData->MidtonePer*(Marks[2]-Marks[0])/255;
		else if (Marks[1] > Marks[2])
			Marks[1] = Marks[2];
	}
	else if (nMark == 1)
	{
		Marks[1] = lpData->iMidtone = Bound(val, Marks[0], Marks[2]);
		if (Marks[2]-Marks[0])
			lpData->MidtonePer = (lpData->iMidtone - Marks[0])*255L/(Marks[2]-Marks[0]);
	}
	else
		return;
	
	// update anything that needs it
	// spins
	i = GetDlgItemSpin(hDlg, IDC_QUART1_VALUE, &Bool, NO);
	i = FROM_DISPLAY(i);
	if (!Bool || i != Marks[0])
		InitDlgItemSpin(hDlg, IDC_QUART1_VALUE, TO_DISPLAY(Marks[0]), NO, 0, MAX_SPIN );
	if (inval != INT_MAX  && nMark==1)
	{
	}
	else
	{
		// update percent
		if (m_bUseMidPer)
		{
			i = GetDlgItemSpin(hDlg, IDC_QUART2_VALUE, &Bool, NO);
			if (!Bool || (i*255L/100) != lpData->MidtonePer)
				InitDlgItemSpin(hDlg, IDC_QUART2_VALUE, lpData->MidtonePer*100L/255, NO, 0, MAX_SPIN );
		}
		else
		{
			i = GetDlgItemSpin(hDlg, IDC_QUART2_VALUE, &Bool, NO);
			i = FROM_DISPLAY(i);
			if (!Bool || i != Marks[1])
				InitDlgItemSpin(hDlg, IDC_QUART2_VALUE, TO_DISPLAY(Marks[1]), NO, 0, MAX_SPIN );
		}
	}

	i = GetDlgItemSpin(hDlg, IDC_QUART3_VALUE, &Bool, NO);
	i = FROM_DISPLAY(i);
	if (!Bool || i != Marks[2])
		InitDlgItemSpin(hDlg, IDC_QUART3_VALUE, TO_DISPLAY(Marks[2]), NO, 0, MAX_SPIN );
	
	// histogram
	hHisto = ::GetDlgItem(hDlg, IDC_HISTOGRAM);
	hTag = ::GetDlgItem(hDlg, IDC_TAGS);
	for (i=0;i<3;i++)
	{
		if (Marks[i] != Histo_GetMark(hHisto,i))
			Histo_SetMark(hHisto,i, Marks[i], NO);
		if (Marks[i] != Tag_GetMark(hTag,i))
			Tag_SetMark(hTag,i, Marks[i], NO);
	}
	
	lpData->lpMap->Pnt[0].x = Marks[0];
	lpData->lpMap->Pnt[1].x = Marks[1];
	lpData->lpMap->Pnt[2].x = Marks[2];
}	
Example #5
0
BOOL CToneBalanceDlg::OnCommand( WPARAM wParam, LPARAM lParam )
{
	int id = LOWORD(wParam);					//unpack the message
	WORD codeNotify = HIWORD(wParam);
	HWND hControl = (HWND) lParam;
	HWND hDlg = GetSafeHwnd();

	int i, val;
	BOOL Bool;
	HWND hActiveWnd;
	LPIMAGE lpImage = NULL;
	

	lpImage = GetImage();

	switch (id)
	{
		case IDC_CHANNELS:
			i=ChannelsCombo_Handle(id, codeNotify);
			if (!i)
				break;
			m_lpData->wChannel = i;
			set_quarter_channel(m_lpData->wChannel);
		break;
	
		case IDC_QUART1_PROBE:
		case IDC_QUART2_PROBE:
		case IDC_QUART3_PROBE:
			if (!Probe_Begin(codeNotify))
				break;
			CheckDlgButton(id, YES );
			m_lpData->iProbe = id-IDC_QUART1_PROBE;
			if (m_lpData->iProbe == 0)
				m_lpData->OriginalValue = m_lpData->iShadow;
			else if (m_lpData->iProbe == 1)
				m_lpData->OriginalValue = m_lpData->iMidtone;
			else
				m_lpData->OriginalValue = m_lpData->iHighlight;
			// unpreview
			UnAutoPreview();
		break;

		case IDC_QUART1_VALUE:
		case IDC_QUART2_VALUE:
		case IDC_QUART3_VALUE:
			if ( ::GetFocus() != ::GetDlgItem( hDlg, id ) )
				break;
			if ( codeNotify != EN_CHANGE)
				break;
			val = GetDlgItemSpin(hDlg, id, &Bool, NO);
			if (!Bool)
				break;
			// convert to 'real' location
			if (id == IDC_QUART2_VALUE && m_bUseMidPer)
			  	i = m_lpData->iShadow + (LONG)val*(m_lpData->iHighlight-m_lpData->iShadow)/100;
			else
				i = FROM_DISPLAY(val);
			if (id != IDC_QUART2_VALUE)
				val = INT_MAX;
			change_mark(m_lpData,  id-IDC_QUART1_VALUE, i, val);
			AutoPreview(m_lpData->lpMap, m_bAutoPreview, NO);
		break;
		
		case IDC_MINHIGHLIGHT:
			if ( ::GetFocus() != ::GetDlgItem( hDlg, id ) )
				break;
			if ( codeNotify != EN_CHANGE)
				break;
			i = GetDlgItemSpin(hDlg, id, &Bool, NO);
			if (!Bool)
				break;
			i = FROM_DISPLAY(i);
			m_lpData->lpMap->Pnt[2].y = i;
			m_lpData->lpMap->Pnt[1].y = (m_lpData->lpMap->Pnt[2].y+m_lpData->lpMap->Pnt[0].y)/2;
			AutoPreview(m_lpData->lpMap,m_bAutoPreview, YES);
		break;
		
		case IDC_MAXSHADOW:
			if ( ::GetFocus() != ::GetDlgItem( hDlg, id ) )
				break;
			if ( codeNotify != EN_CHANGE)
				break;
			i = GetDlgItemSpin(hDlg, id, &Bool, NO);
			if (!Bool)
				break;
			i = FROM_DISPLAY(i);
			m_lpData->lpMap->Pnt[0].y = i;
			m_lpData->lpMap->Pnt[1].y = (m_lpData->lpMap->Pnt[2].y+m_lpData->lpMap->Pnt[0].y)/2;
			AutoPreview(m_lpData->lpMap, m_bAutoPreview, YES);
		break;
		
		case IDC_HISTOGRAM:
			// value changed
			if (WITHIN(codeNotify, HTN_CHANGED_FIRST, HTN_CHANGED_LAST))
			{
				i = codeNotify-HTN_CHANGED_FIRST;
				Bool = TRUE;
			}
			else if (WITHIN(codeNotify, HTN_CHANGING_FIRST, HTN_CHANGING_LAST))
			{
				i = codeNotify-HTN_CHANGING_FIRST;
				Bool = FALSE;
			}
			else
				break;
			val = Histo_GetMark(hControl, i);
			change_mark(m_lpData, i, val, INT_MAX);
			AutoPreview(m_lpData->lpMap, m_bAutoPreview, Bool);
		break;
		
		case IDC_TAGS:
			// value changed
			if (WITHIN(codeNotify, TN_CHANGED_FIRST, TN_CHANGED_LAST))
			{
				i = codeNotify-TN_CHANGED_FIRST;
				Bool = TRUE;
			}
			else if (WITHIN(codeNotify, TN_CHANGING_FIRST, TN_CHANGING_LAST))
			{
				i = codeNotify-TN_CHANGING_FIRST;
				Bool = FALSE;
			}
			else
				break;
			val = Tag_GetMark(hControl, i);
			change_mark(m_lpData, i, val, INT_MAX);
			AutoPreview(m_lpData->lpMap, m_bAutoPreview, Bool);
		break;

//		case IDC_PREVIEW:
//	  		AutoPreview_Button(m_lpData->lpMap);
//		break;
		
		
//		case IDC_QUART_DEFAULTS:
//			// setup channel with sacrifice defaults
//			set_sacrifice(m_lpData, m_lpData->wChannel);
//			// setup the actual histogram and controls 
//			set_quarter_channel(m_lpData->wChannel);
//			AutoPreview(m_lpData->lpMap, m_bAutoPreview, YES);
//		break;
	
		


   		default:
		break;
   }
return CWnd::OnCommand(wParam, lParam);
}