计算机图形学基础MFC,采用简单透明处理来绘制一个黄色透明矩形(RGB(250,250,150))和蓝色圆形( RGB (150,250,250))。具体步骤如下: 1)获取矩形和圆形内部点的光强;2)根据这些点的光强和透射系数计算透射后所有点的光强; 3)绘制矩形和圆形。
时间: 2024-02-25 19:59:05 浏览: 12
以下是基于MFC的简单透明处理绘制黄色透明矩形和蓝色圆形的代码示例:
在头文件中声明一个 CBrush 对象和一个 CPen 对象:
```cpp
class CMyView : public CView
{
protected:
CBrush m_brushYellow;
CBrush m_brushBlue;
CPen m_penBlue;
//...
};
```
在构造函数中初始化这几个对象:
```cpp
CMyView::CMyView()
{
m_brushYellow.CreateSolidBrush(RGB(250, 250, 150));
m_brushBlue.CreateSolidBrush(RGB(150, 250, 250));
m_penBlue.CreatePen(PS_SOLID, 1, RGB(150, 250, 250));
//...
}
```
在 OnDraw 函数中进行简单透明处理并绘制矩形和圆形:
```cpp
void CMyView::OnDraw(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
int x = rect.Width() / 2;
int y = rect.Height() / 2;
int r = min(x, y) * 2 / 3;
// 绘制矩形
CBrush* pOldBrush = pDC->SelectObject(&m_brushYellow);
for (int i = x - r; i <= x + r; i++) {
for (int j = y - r; j <= y + r; j++) {
int alpha = 100; // 透明度
COLORREF oldColor = pDC->GetPixel(i, j);
int r = GetRValue(oldColor);
int g = GetGValue(oldColor);
int b = GetBValue(oldColor);
// 计算透射后的颜色
int new_r = (r * (255 - alpha) + 250 * alpha) / 255;
int new_g = (g * (255 - alpha) + 250 * alpha) / 255;
int new_b = (b * (255 - alpha) + 150 * alpha) / 255;
// 绘制像素点
pDC->SetPixel(i, j, RGB(new_r, new_g, new_b));
}
}
pDC->SelectObject(pOldBrush);
// 绘制圆形
CPen* pOldPen = pDC->SelectObject(&m_penBlue);
pOldBrush = pDC->SelectObject(&m_brushBlue);
for (int i = x - r; i <= x + r; i++) {
for (int j = y - r; j <= y + r; j++) {
int alpha = 50; // 透明度
COLORREF oldColor = pDC->GetPixel(i, j);
int r = GetRValue(oldColor);
int g = GetGValue(oldColor);
int b = GetBValue(oldColor);
// 计算透射后的颜色
int new_r = (r * (255 - alpha) + 150 * alpha) / 255;
int new_g = (g * (255 - alpha) + 250 * alpha) / 255;
int new_b = (b * (255 - alpha) + 250 * alpha) / 255;
// 绘制像素点
pDC->SetPixel(i, j, RGB(new_r, new_g, new_b));
}
}
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
}
```
这段代码会在中央绘制一个黄色透明矩形和一个蓝色透明圆形。其中,矩形的透明度为 100,圆形的透明度为 50。