본문 바로가기
.Net

C# - System.Drawing.Color의 Magenta Color 버그

by Dokon Jang 2015. 6. 16.
반응형

C#에서 제공하는 다양한 색상등이 정의되어 있고, 매우 유용합니다.

하지만 Color.Magenta 색상에는 버그가 있는 것으로 생각됩니다.

예를 들어 Color.Magenta 색상으로 단색의 Bitmap을 생성하고, Bitmap을 여러 Control(Picture Box / Tool Strip Button 등)에 함께 사용하면 이미지가 표시되지 않는 현상이 발생합니다.

(다른 색상의 경우 정상적으로 표시됩니다.)

 

- 반드시 Magenta 색상을 사용해야 한다면 아래의 코드를 적용해서 사용하시길 바랍니다.

  (다른 색상에도 문제가 있는지 전수 검사를 하지 않았으면, 동일 현상이 발생한다면 아래의 코드를 참고하세요.)

Color color = Color.FromName("Magenta");
color = Color.FromArgb(color.R - 1, color.G, color.B);
 

 

Color.Magenta 색상에 대한 버그 테스트 전체 소스입니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TEST
{
    public partial class Form1 : Form
    {
        Bitmap bitmapMagenta;
        Bitmap bitmapBlue;

        public Form1()
        {
            InitializeComponent();
        }

        // Button Click 이벤트
        private void btnMagenta_Click(object sender, EventArgs e)
        {
            if (bitmapMagenta == null)
            {
                Color color = Color.FromName("Magenta");
                //color = Color.FromArgb(color.R - 1, color.G, color.B);

                // 이미지 생성
                bitmapMagenta = new Bitmap(50, 50);
                for (int i = 0; i < bitmapMagenta.Width; i++)
                {
                    for (int j = 0; j < bitmapMagenta.Height; j++)
                    {
                        bitmapMagenta.SetPixel(i, j, color);
                    }
                }
            }

            pictureBox.Image = bitmapMagenta;
            toolStripButton.Image = bitmapMagenta;
        }

        // Button Click 이벤트
        private void btnBlue_Click(object sender, EventArgs e)
        {
            if (bitmapBlue == null)
            {
                Color color = Color.FromName("Blue");

                // 이미지 생성
                bitmapBlue = new Bitmap(50, 50);
                for (int i = 0; i < bitmapBlue.Width; i++)
                {
                    for (int j = 0; j < bitmapBlue.Height; j++)
                    {
                        bitmapBlue.SetPixel(i, j, color);
                    }
                }
            }

            pictureBox.Image = bitmapBlue;
            toolStripButton.Image = bitmapBlue;
        }
    }
}
 

 

반응형

댓글