处理毛孔问题.docx
《处理毛孔问题.docx》由会员分享,可在线阅读,更多相关《处理毛孔问题.docx(24页珍藏版)》请在冰豆网上搜索。
![处理毛孔问题.docx](https://file1.bdocx.com/fileroot1/2023-2/9/e84736bf-2e50-4438-962b-d2350fcf336e/e84736bf-2e50-4438-962b-d2350fcf336e1.gif)
处理毛孔问题
处理毛孔问题.txt爱,就大声说出来,因为你永远都不会知道,明天和意外,哪个会先来!
石头记告诉我们:
凡是真心爱的最后都散了,凡是混搭的最后都团圆了。
你永远看不到我最寂寞的时候,因为在看不到你的时候就是我最寂寞的时候!
处理毛孔问题.txt∞-一人行,必会发情二人行,必会激情三人行,必有奸情就不会被珍惜。
真实的女孩不完美,完美的女孩不真实。
得之坦然,失之淡然,顺其自然,争其必然。
1.用仿制图章工具祛除大包和污点
2.建立新图层,双击左边工具栏的快速蒙版,调出选项,变更不透明度为40%
3.用画笔描绘填充皮肤部分,用不透明度为100%橡皮擦去毛发和褶皱
4.祛除皮肤以外的影象,边缘适当羽化
5.检查通道中的快速蒙版影象,填补漏图的地方
6.回到图层,删除皮肤以外的影象
7.关键部分在底层上用快速蒙版选区,选择皮肤部分,用滤镜USM锐化,加强皮肤毛孔影象
8.在上层皮肤上,用特殊模糊去斑,用高斯模糊柔化
9.调整被柔化皮肤层的,不透明度为80-90%,显露下层毛孔,同时调整色阶减小皮肤层的色差和反差,合并所有图层。
10.再新建一个图层,选择为屏幕(这是图象会变亮,调整不透明度为40%),在屏幕层上USM锐化,突出毛发
11.合并所有图层,调整色彩平衡,大体基本完成
12.剩下的是可调可不调的嘴唇,大致方法同上
13.完成效果:
(皮光了,毛孔还在)
设计一个简单的计算器应用程序VC++
原创↑
CONTENTS
?
程序设计内容与要求………………………………………………………1
?
程序设计环节………………………………………………………………1
?
程序简介………………………………………………………………1
?
程序基本实现思路……………………………………………………2
?
程序主要代码…………………………………………………………2
?
变量初始值……………………………………………………………2
?
主要实现代码…………………………………………………………3
?
心得体会……………………………………………………………………17
?
参考资料……………………………………………………………………18
?
程序界面图…………………………………………………………………19
Windows程序课程设计
课程设计题目:
设计一个简单的计算器应用程序
一、设计目标与内容:
1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;
2.基本掌握面向对象程序设计的基本思路和方法;
3.掌握用VC++开发应用程序的的一般步骤和方法;
4.能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基本的加、减、乘、除、求平方根等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切,实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。
5.在程序中注意处理数据和运算符的输入,计算结果的显示。
二,设计要求:
1.用VC++进行编码,实现应用程序的功能。
注重编码质量,代码要有适当的注释;
2.提交设计报告一份(课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。
三.程序设计环节:
1.程序简介:
本程序在VS.NET2005的c++语言中的MFC开发制作,经测试(使用动态dll库)在同等环境(VS.NET2005)下可以正常运行执行文件完成计算器功能。
使用静态dll库时候,不改变执行程序路径可以正常运行,但移动到其他位置的执行文件运行会缺少3D按钮效果,其他功能不变。
但在VC6.0和.NET2003环境下不能直接使用(提示缺少库文件)。
解决办法是使用installshield制作软件安装包。
在没有装有VS.NET2005的机器上可以用安装包安装该计算器,该安装包会在桌面放置一程序快捷方式和卸载图标。
本软件不写注册表。
2.程序基本实现思路:
1当前输入的数据,和数据处理过程均由变量n完成。
因为最多是2元运算,另设一变量n_2表示第2个数,需要时由n_2=n赋值。
2数字录入部内容相似,首先建立一个函数inum(),负责处理所输入的数字,按下相应数字键时候,调用inum()完成数字的输入和显示。
3数据计算部分.由函数operation(charope),通过选择所按下的运算符(该函数的变量)来完成相应的计算并显示。
由于运算符分为单元运算和双元所以具有类似性,分开处理。
4小数输入。
按下小数点后,变量setxiaoshu=true,激活小数输入功能。
inum()做出输入小数的判断并输出预期数。
5正负号的改变可以通过每按下该键后执行n=-n来执行。
对于负数的录入功能,也由inum()做出判断,完成正确的负数录入过程。
6等号的实现调用operation(operate),完成相应运算。
7删除一个字符,用n=long(n/10)的思路来完成,由于long的范围,所以删除只能实现10位以内的删除。
8CE和C键。
CE负责清楚欲输入的第2个数据的相关变量,C清空所有变量,重置计算器。
3.根据上述设想编写程序,主要代码如下:
变量初始值(dlg.cpp文件):
#include"stdafx.h"
#include"计算器.h"
#include"计算器Dlg.h"
#include"math.h"
#include"time.h"//可以不用,屏蔽srand()
#include"stdlib.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
C计算器Dlg:
:
C计算器Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(C计算器Dlg:
:
IDD,pParent)
n(0)
setxiaoshu(false)
xiaoshui(0)
innum(0)
n_2(0)
operate(0)
setnew(false)
BEGIN_MESSAGE_MAP(C计算器Dlg,CDialog)
…….//系统消息和控件的函数
主要实现代码:
(dlg.cpp文件):
//注:
下面所有控件名称使用加粗字体和下划线表示该按键
voidC计算器Dlg:
:
OnPaint()//重写OnPaint(),实现,界面颜色的改变
{
intc_r,c_g,c_b,c;//3个变量分别代表R/G/B
//srand(time(0));//控制随机函数rand()的取值时间(间隔1s左右更新值),后来为实现每次按键都变色把这句去掉了
c_r=rand()%256;//rand()%256代表变量取值为0-255之间的整数,下同
c_g=rand()%256;
c_b=rand()%256;
c=rand()%4;//c=0-3,即分为4种情况,分别绘制不同的颜色方案.实现更多色彩.
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
if(c==0)//蓝色渐变,其他两种颜色随机
{
CPaintDCdc(this);
CRectrc;
GetClientRect(&rc);
intnHeight=rc.Height();
for(inti=0;nHeight>=0;nHeight--,i++)
{
CPenpen;
pen.CreatePen(PS_SOLID,1,RGB(c_r,c_g,i));
CPen*pOldPen=dc.SelectObject(&pen);
dc.MoveTo(rc.left,i);
dc.LineTo(rc.right,i);
dc.SelectObject(pOldPen);
pen.DeleteObject();
}
}
elseif(c==1)//绿色渐变,其他两种颜色随机
{
CPaintDCdc(this);
CRectrc;
GetClientRect(&rc);
intnHeight=rc.Height();
for(inti=0;nHeight>=0;nHeight--,i++)
{
CPenpen;
pen.CreatePen(PS_SOLID,1,RGB(c_r,i,c_b));
CPen*pOldPen=dc.SelectObject(&pen);
dc.MoveTo(rc.left,i);
dc.LineTo(rc.right,i);
dc.SelectObject(pOldPen);
pen.DeleteObject();
}
}
elseif(c==2)//红色渐变,其他两种颜色随机
{
CPaintDCdc(this);
CRectrc;
GetClientRect(&rc);
intnHeight=rc.Height();
for(inti=0;nHeight>=0;nHeight--,i++)
{
CPenpen;
pen.CreatePen(PS_SOLID,1,RGB(i,c_g,c_r));
CPen*pOldPen=dc.SelectObject(&pen);
dc.MoveTo(rc.left,i);
dc.LineTo(rc.right,i);
dc.SelectObject(pOldPen);
pen.DeleteObject();
}
}
else//都不渐变,所有随机
{
CPaintDCdc(this);
CRectrc;
GetClientRect(&rc);
intnHeight=rc.Height();
for(inti=0;nHeight>=0;nHeight--,i++)
{
CPenpen;
pen.CreatePen(PS_SOLID,1,RGB(c_r,c_g,c_r));
CPen*pOldPen=dc.SelectObject(&pen);
dc.MoveTo(rc.left,i);
dc.LineTo(rc.right,i);
dc.SelectObject(pOldPen);
pen.DeleteObject();
}
}
}
}
voidC计算器Dlg:
:
OnBnClickedButton31()//控件pi对应的函数按键pi的处理
n=3.14159265358979;//把pi值3.14159265358979赋给n
UpdateData(false);
Invalidate();//重新执行OnPaint()函数实现每一次按键,界面自动变色.下面各控件对应函数也调用这函数,如控件对应函数//没有直接显示,就是在被调用的函数中有该函数
}
////////////////////////////////////////以下部分处理方式相似(数字录入)//////////////////
voidC计算器Dlg:
:
OnBnClickedButton0()//控件0对应的函数.调用inum()产生预期的数.包括整数/小数/正数/负数.下面1-9同
{按键0的处理
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();//setnew为true,清除所有控制变量,在上次计算出结果后
innum=0;//把0赋给变量inum,执行相应的+++-//可以不用按C键清除直接按数字键开始下一个运
C计算器Dlg:
:
inum(innum);//完成数据的输入过程.//算.setnew=true会在每个单元运算符和等号中出现.setnew
UpdateData(false);//在屏幕上显示当前n的值,下同//为false,继续输入该数据.setnew=false出现在每个双元运算
}//符中.因OnBnClickedButton23()中已包含Invalidate(),但OnBnClickedButton23()不是每次都执行,//为避免代码的重复执行,采用ifelse形式.
voidC计算器Dlg:
:
OnBnClickedButton1()//控件1对应的函数按键1的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=1;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton2()//控件2对应的函数按键2的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=2;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton3()//控件3对应的函数按键3的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=3;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton4()//控件4对应的函数按键4的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=4;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton5()//控件5对应的函数按键5的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=5;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton6()//控件6对应的函数按键6的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=6;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton7()//控件7对应的函数按键7的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=7;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton8()//控件8对应的函数按键8的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=8;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
voidC计算器Dlg:
:
OnBnClickedButton9()//控件9对应的函数按键9的处理
{
if(setnew)C计算器Dlg:
:
OnBnClickedButton23();elseInvalidate();
innum=9;
C计算器Dlg:
:
inum(innum);
UpdateData(false);
}
////////////////////////////////////////////////结束////////////////////////////////////////////////////////
///////////////////////////////////以下部分处理方式相似(双元运算)///////////////////////
voidC计算器Dlg:
:
OnBnClickedButton16()//控件+对应的函数.下面的-*/x^y同+符号的处理
{
C计算器Dlg:
:
OnBnClickedIsButton();//自动完成上次未完成的运算.当上一次计算完双元运算没有按等号键时候,如只按//下1+1而没有按=的时候,直接按+.可以实现连续计算,从而省去每次都按=的麻烦,//更符合使用的习惯.
n_2=n;//因为是双元运算,按下+后,把输入值存入另一个数据中,开始输入新的数据
C计算器Dlg:
:
setempty();//置空n的各项参数,便于以后重新输入新n值时不影响
setnew=false;//setnew=false(由数字录入部分做出相应).不是在重新输入数据,下面按数字键时接着录入部分执行相应操作
operate='+';//操作符为+,,由OnBnClickedIsButton()处理加法运算
}
voidC计算器Dlg:
:
OnBnClickedButton15()//控件-对应的函数.-符号的处理
{
C计算器Dlg:
:
OnBnClickedIsButton();
n_2=n;
C计算器Dlg:
:
setempty();
setnew=false;
operate='-';
}
voidC计算器Dlg:
:
OnBnClickedButton14()//控件*对应的函数.*符号的处理
{
C计算器Dlg:
:
OnBnClickedIsButton();
n_2=n;
C计算器Dlg:
:
setempty();
setnew=false;
operate='*';
}
voidC计算器Dlg:
:
OnBnClickedButton13()//控件/对应的函数./符号的处理
{
C计算器Dlg:
:
OnBnClickedIsButton();
n_2=n;
C计算器Dlg:
:
setempty();
setnew=false;
operate='/';
}
voidC计算器Dlg:
:
OnBnClickedButton27()//控件x^y对应的函数.x^y符号的处理
{
C计算器Dlg:
:
OnBnClickedIsButton();
n_2=n;
C计算器Dlg:
:
setempty();
operate='y';
setnew=false;
}
////////////////////////////////////////////////结束///////////////////////////////////////////////////////
////////////////////////////////////////以下部分处理方式相似(单元运算)//////////////////
voidC计算器Dlg:
:
OnBnClickedButton19()//控件1/x对应的函数.下面符号处理类似1/x符号的处理
{
operate='x';//下面执行1/x的运算
C计算器Dlg:
:
operation(operate);//单元运算,按下该符号直接进行运算
UpdateData(false);
operate='0';//在这个运算符算出的数据后,输入另外一个数据时候,按下双元运算符因为会先执行OnBnClickedIsButton(),操//作符为0,什么也不执行
setnew=true;//在数字录入部分做出判断,setnew=true按下数字键时候,执行OnBnClickedButton23(),清空变量.开始新的运算
voidC计算器Dlg:
:
OnBnClickedButton17()//控件sqrt对应的函数.sqrt符号的处理
{
operate='q';
C计算器Dlg:
:
operation(operate);
UpdateData(false);
operate='0';
setnew=true;
}
voidC计算器Dlg:
:
OnBnClickedButton24()//控件sin对应的函数.sin符号的处理
{
operate='s';
C计算器Dlg:
:
operation(operate);
UpdateData(false);
operate='0';
setnew=true;
}
voidC计算器Dlg:
:
OnBnClickedButton25()//控件cos对应的函数.cos符号的处理
{
operate='c';
C计算器Dlg:
:
operation(operate);
UpdateData(false);
operate='0';
setnew=true;
}
voidC计算器Dlg:
:
OnBnClickedButton26()//控件tan对应的函数.tan符号的处理
{
operate='t';
C计算器Dlg:
:
operation(operate);
UpdateData(false);
operate='0';
setnew=true;
}
voidC计算器Dlg:
:
OnBnClickedButton29()//控件ln对应的函数.ln符号的处理
{
operate='n';
C计算器Dlg:
:
operation(operate);
UpdateData(false);
operate='0';
setnew=true;
}
voidC计算器Dlg:
:
OnBnClickedButton30()//控件lg对应的函数.lg符号的处理
{
operate='g';
C计算器Dlg:
:
operation(operate);
UpdateData(false);
operate='0'