>  기사  >  백엔드 개발  >  C# GDI+ 프로그래밍 (3)

C# GDI+ 프로그래밍 (3)

高洛峰
高洛峰원래의
2016-12-17 10:14:241597검색

색상의 알파값

색상은 투명도인 알파값도 설정할 수 있습니다. 예: Color.FromArgb(120,255,255,255). FromArgb에는 4개의 매개변수가 있으며 첫 번째 매개변수는 Alpha 값을 지정합니다.
마지막 3개는 색상값 RGB입니다.
알파 값 범위는 0~255이며, 0은 완전 투명, 255는 불투명을 의미합니다.
반투명 브러시의 예를 살펴보세요.
private void formPaint(Object sender, PaintEventArgs e)
{
//경로 만들기
GraphicsPath path = new Graph icsPath();
직사각형 ect = new Rectangle(0, 0, 100, 100);
SolidBrush strBrush=new SolidBrush(Color.Orange);
e.Graphics.DrawString("ABCDEFGHIJK", new Font("黑体", 20f), strBrush, ret);
path.AddRectangle(ect);
//경로 브러시 만들기
PathGradientBrush 브러시 = new PathGradientBrush(path);
​​​ //중심점 색상
brush.CenterColor = Color.FromArgb(120,255,255,255);
                                                       ~ >

안티 앨리어싱

선의 앨리어싱 제거는 열거 유형인 Graphics 클래스의 SmoothingMode 속성 멤버를 설정하여 수행됩니다.

앤티앨리어싱을 설정하는 명령문 예: e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

앨리어싱을 제거한 후 선이 훨씬 더 부드러워 보입니다.

해당 코드는 다음과 같습니다.

Pen pen=new Pen(Color.Green,2);

Rectangle ect1 = new Rectangle(0, 0, 100, 100);

e.Graphics.DrawEllipse(펜, 직사각형1);

                                                                                                                                                          새 직사각형(100, 0, 100, 100);

e.Graphics.DrawEllipse(pen, ect2);

스무딩 모드 열거형에는 앤티앨리어싱 수준을 다르게 설정하거나 앨리어싱을 제거하지 않을 수 있는 다른 멤버도 있습니다.

텍스트 앤티앨리어싱
표시된 텍스트를 앤티앨리어싱하려면 TextRenderingHint를 설정하기만 하면 됩니다.
샘플 코드:
private void formPaint(Object sender, PaintEventArgs e)
{
SolidBrush 브러시 = new SolidBrush(Color.Green);
e.Graphics.DrawString("ABCDEFGHIJKL", new Font("宋体", 15f), 브러시, 0, 20); e.Graphics.DrawString("ABCDEFGHIJKL", new Font("宋体", 15f), 브러시, 0, 50);                                                                       이러한 API를 호출할 수 있습니다. 그리고 많은 개념이 유사합니다. 예를 들어 창 핸들, 영역 핸들이 있습니다.

예를 들어 Region 클래스의 GetHrgn 함수는 지역 핸들을 가져올 수 있습니다.

그리고 영역이 무엇인지 더 잘 이해할 수 있도록 영역과 경로의 관계에 대해 이야기해 보겠습니다. 영역과 경로의 관계는 채워진 그래픽과 그래픽의 관계와 같습니다.

경로와 직사각형을 사용하여 영역을 만들 수 있습니다. Region의 생성자를 통해.

다음 예에서는 직사각형으로 두 영역을 만들고 채웁니다.

private void formPaint(Object sender, PaintEventArgs e)

{

//너비와 높이가 100인 직사각형 영역 2개

영역 Region1=new Region(new Rectangle(0 ,0,100,100)) ;

Region Region2=new Region(new Rectangle(50,50,100,100));

//브러시 1을 생성하고 영역 1을 채웁니다. 색상의 알파 값은 125

SolidBrush Brush1 = new SolidBrush( Color .FromArgb(125, 255, 0, 0));

e.Graphics.FillRegion(brush1, Region1);

//브러시 2를 만들고 영역 2를 채웁니다
SolidBrush Brush2 = new SolidBrush( Color. FromArgb(125, 0, 255, 0));
e.Graphics.FillRegion(brush2, Region2);
CombineRgn의 95개 함수도 언급되었으므로 해당 함수를 참조할 수 있습니다.

CombineRgn API 함수의 마지막 매개변수 nCombineMode는 두 영역을 병합하는 방법을 지정하므로 Region 클래스의 병합에도 유사한 기능이 있어야 합니다.

은 병합 방법을 나타내지만 Region 클래스는 매개변수로 지정되지 않고 다른 함수를 직접 호출합니다.

예를 들어 Region.Intersect 함수는 RGN_AND이고 Region.Union은 RGN_OR 병합 방법입니다. . Region1.Exclude는 RGN_DIFF입니다.

Region.Xor는 RGN_XOR 모드에서 병합됩니다.

nCombineMode 매개변수 설명:

>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>API CombineRgn에서 기능>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>> ;>>>>>>>>>>>>>>>>>>> ;

RGN_AND 겹침 두 영역의 일부

RGN_OR 두 영역을 결합

RGN_DIFF hSrcRgn1의 겹치지 않는 부분

RGN_XOR hSrcRgn1과 hSrcRgn2의 겹치지 않는 부분

이 함수로 병합하여 얻은 영역은 영역 2와 겹치지 않는 부분인 Complement 함수도 있습니다.

예제를 보세요:

private void formPaint(Object sender, PaintEventArgs e)
{
//너비와 높이가 100인 두 개의 직사각형 영역
Region1 =new Region(new Rectangle(0,0,100,100));
Region2=new Region(new Rectangle(50,50,100,100));
//영역을 사용합니다.
       지역1.Xor(region2); 1 ;
{
InitializeComponent();
//원형 경로 생성
GraphicsPath path = new GraphicsPath();

path.Add 타원(0, 0, 100, 100);

Region.IsVisible은 영역 내에 점(또는 직사각형)이 있는지 확인합니다.
예를 보면 원형 영역에 마우스가 들어가자마자 해당 영역이 표시됩니다. 빨간색.
public 부분 클래스 Form1: Form
{
//정상 상태에서 영역을 채우는 브러시
public SolidBrush norBrush=new SolidBrush(Color.Green);
//마우스는 in the Area 시간을 채우는 브러시
public SolidBrush hovBrush = new SolidBrush(Color.Red);
//마우스가 해당 영역 내에 있는지 여부
public bool hovFlag = false;
/ /원형 영역
공개 영역 영역;
공개 Form1()
초기화 구성 요소();
GraphicsPath 경로 = 새 GraphicsPath();
path.AddEllipse( 50, 50, 100, 100) ;
//경로를 통해 지역 생성
지역 = 새 지역(경로);
. 지역);

                                                                                                     ~     graphics = this.CreateGraphics();
//마우스가 해당 영역에 처음 들어갈 때
if (region.IsVisible(e.X, e.Y) && hovFlag != true)
{
           hovFlag = true;
Graphics.FillRegion(hovBrush, region);
           }
           //鼠标离开区域了
            else if (region.IsVisible(e.X, e.Y) != true && hovFlag)
            {
                hovFlag = false;
graphic.FillRegion(norBrush, 지역);
}
C# GDI+ 프로그래밍 (3) 관련 글은 PHP 중국어 홈페이지를 참고해주세요. !

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.