Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 17:29   #1
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию Преобразование цветов (ColorDialog)

Столкнулся с такой проблемой: Есть набор допустимых цветов (для рисования графиков). Реализован выбор цвета в классе (пришел номер цвета-вышел цвет). Требуется выбрать из этих цветов в ColorDialog. Для вывода цветов использую свойство ColorDialog.CustomColors . Но CustomColors-это целочисленный массив. И что-то преобразования Color-> int и int->Color делается неправильно.
Класс с допустимыми цветами:
Код:
public static class Colors
    {
        
        

        public static Color GetColor(int icol)
        {
            Color cl = Color.CornflowerBlue;
            switch (icol)
            {
                case 0: return Color.Black;
                case 1: return Color.CornflowerBlue;
                case 3: return Color.Firebrick ;
                case 4: return Color.Indigo;
                case 5: return Color.DarkGreen;
                case 7: return Color.Black;
                case 9: return Color.SkyBlue;
                case 10: return Color.Gray;
                case 11: return Color.Green;
                case 12: return Color.Violet;
                case 13: return Color.Red;
                case 14: return Color.Tomato;
                case 15: return Color.Blue;
                    
            }
            return cl;
        }
        
        public static int[] GetCustomColors()
        {
            List<int> col = new List<int>();
            for (int i = 0; i < 16; i++)
            {
                col.Add(Math.Abs(GetColor(i).ToArgb()));
            }
            return col.ToArray();
        }
        public static int GetIndex(Color c)
        {
            int[] mas1 = GetCustomColors();
            int col = Math.Abs(c.ToArgb());
            for (int ii = 0; ii < mas1.Length; ii++)
            {
                if (col == mas1[ii])
                {
                    return ii;
                }
            }
            return 1;
        }
    }
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 30.05.2011, 17:33   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию продолжение

Вот как я его использую:
Код:
                ColorDialog dia = new ColorDialog();
                dia.AllowFullOpen = false;
                dia.AnyColor = false;
                dia.CustomColors = Colors.GetCustomColors();
                if (dia.ShowDialog() == DialogResult.OK)
                {

                    int col = Colors.GetIndex(dia.Color);//col,т.е. номер выбранного цвета приходит неправильный
                    
                };
Собственно преобразование int col = Math.Abs(c.ToArgb()); и искажает цвета. Как с этим быть или какое преобразование использовать?
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 30.05.2011 в 17:35.
Скарам вне форума Ответить с цитированием
Старый 30.05.2011, 19:37   #3
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

В CustomColors цвета в формате BGR
Spawn™Production® вне форума Ответить с цитированием
Старый 30.05.2011, 22:19   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Спасибо,все решилось простой заменой Math.Abs(c.ToArgb()) на ColorTranslator.ToWin32(c).)
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между colorDialog->ShowDialog() и this->colorDialog->ShowDialog() Alexei91 Общие вопросы C/C++ 1 16.09.2010 11:32
изменение цветов Lemon2009 Общие вопросы по Java, Java SE, Kotlin 1 01.09.2010 12:40
ColorDialog | получить шестандцатеричный код выбранного цвета T-dayne Помощь студентам 9 14.03.2010 19:10
Сравнивание цветов Zeraim Общие вопросы Delphi 7 26.04.2008 12:49