VC + 색상 그 라 데 이 션 실현 3 가지 방법
( 、 、 ) , , 。 , , 。 , 。 3 , 2 。
1. : R、G、B , , R、G、B R、G、B ( ), R、G、B + 。 :
void CDrawColorDlg::DrawGradientColor(COLORREF StartColor,COLORREF EndColor)
{
CRect rect;
GetClientRect(rect);//
// R、G、B
BYTE r1 = GetRValue(StartColor);
BYTE g1 = GetGValue(StartColor);
BYTE b1 = GetBValue(StartColor);
// R、G、B
BYTE r2 = GetRValue(EndColor);
BYTE g2 = GetGValue(EndColor);
BYTE b2 = GetBValue(EndColor);
double r,g,b;
r = (double)(r2-r1)/rect.Width();
g = (double)(g2-g1)/rect.Width();
b = (double)(b2-b1)/rect.Width();
BYTE r3;
BYTE g3 ;
BYTE b3;
CDC* pDC = GetDC();// DC
//
for (int i = 0 ; i<rect.Width();i++)
{
// R、G、B
r3 = r1+ i*r;
g3 = g1+i*g;
b3 = b1+i*b;
CPen pen(PS_SOLID,1,RGB(r3,g3,b3));
pDC->SelectObject(&pen);
pDC->MoveTo(i,0);
pDC->LineTo(i,rect.Height());
}
pDC->DeleteDC();
}
。 , 。
2. windows API GradientFill(): 。 MSDN。 :
void CDrawColorDlg::DrawGradientColor(COLORREF StartColor,COLORREF EndColor)
{
CRect rect;
GetClientRect(rect);//
CDC* pDC = GetDC();// DC
//
GradientFillRect(pDC->m_hDC,rect, GRADIENT_FILL_RECT_H, StartColor, EndColor);
pDC->DeleteDC();
}
, API 。
3. : ( ) BMP , API 。
void CDrawColorDlg::DrawGradientColor()
{
CRect rect;
GetClientRect(rect);//
CDC* pDC = GetDC();// DC
CDC memDC;
memDC.CreateCompatibleDC(pDC);
BITMAP bm;
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, m_strBitmap, IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);
ASSERT(hBitmap);
if (bitmap.m_hObject)
bitmap.Detach();
bitmap.Attach(hBitmap);
bitmap.GetBitmap(&bm);
CBitmap *pOldBitmap = (CBitmap*)memDC.SelectObject(&bitmap);
//pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
pDC->StretchBlt(0, 0, rect.Height(), rect.Width(),&memDC, 0, 0,bm.bmWidth,bm.bmHeight, SRCCOPY);
pDC->SelectObject(pOldBitmap);
memDC.DeleteDC();
pDC->DeleteDC();
}
, , , ( )。
4.GDI+ LinearGradientBrush: , 3 。 。 GDI+ 。
3 , 。
:http://download.csdn.net/source/2836144
:http://blog.csdn.net/mycaibo
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제한된 크기의 디렉토리를 만드는 방법오늘 저는 장치에 공간이 없을 때 백업 중에 응용 프로그램이 어떻게 작동하는지 테스트(및 수정)하는 작업이 있습니다. 결과적으로 "남은 공간 없음"오류로 백업이 실패하면 새 파일이 없어야 합니다. 지금까지 문제를 재...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.