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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2012, 01:08   #1
dotmeer
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 14
По умолчанию c# picturebox прозрачность фигур

доброго времени суток
возникла потребность сделать так, чтобы на пикчербоксе 2 пересекающихся круга были прозрачны друг для друга, но не прозрачны для фона. то есть, если круги имеют синий и красный цвета, область их пересечения имеет цвет фиолетовый, но черный, например, фон не вносит никаких искажений в цветовую гамму. пока что пробовал через альфа-компоненту, но тогда фон влияет.
есть ли какие-то ещё варианты? стандартные свойства пикчербокса? или придется вручную пересчитывать каждый пиксель?
dotmeer вне форума Ответить с цитированием
Старый 30.10.2012, 07:24   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Кинь как пробовал (проект архивом), поглядим, поколдуем.
Пока, думаю, можно попробовать System.Drawing.Drawing2D.ColorBlend
phomm вне форума Ответить с цитированием
Старый 30.10.2012, 22:41   #3
dotmeer
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 14
По умолчанию

делается это следующим образом:
Код:
private void PalitreDrawEilerCircls()
        {
            Bitmap bmp = new Bitmap(540, 360);
            Graphics drawIt = Graphics.FromImage(bmp);
            palitreBuffer.BackColor = Color.FromArgb(255, int.Parse(textBoxPalitreColorsBGR.Text.ToString()), int.Parse(textBoxPalitreColorsBGG.Text.ToString()), int.Parse(textBoxPalitreColorsBGB.Text.ToString()));
            palitreBuffer.Blue = Color.FromArgb(127, int.Parse(textBoxPalitreColorsBlueR.Text.ToString()), int.Parse(textBoxPalitreColorsBlueG.Text.ToString()), int.Parse(textBoxPalitreColorsBlueB.Text.ToString()));
            palitreBuffer.Red = Color.FromArgb(127, int.Parse(textBoxPalitreColorsRedR.Text.ToString()), int.Parse(textBoxPalitreColorsRedG.Text.ToString()), int.Parse(textBoxPalitreColorsRedB.Text.ToString()));
            drawIt.Clear(palitreBuffer.BackColor);
            drawIt.FillEllipse((new Pen(palitreBuffer.Blue)).Brush, 170 - 130, (180 - 130), 260, 260);
            drawIt.FillEllipse((new Pen(palitreBuffer.Red)).Brush, 370 - 130, (180 - 130), 260, 260);
            pictureBoxPalitre.Image = bmp;
        }
цвета кругов и фона, понятное дело, изменяемые

изображение - как сейчас всё выглядит

с Drawing2D.Blend сейчас погуглю, как получу какой-нибудь результат - расскажу
Изображения
Тип файла: jpg 11.jpg (9.5 Кб, 78 просмотров)
dotmeer вне форума Ответить с цитированием
Старый 30.10.2012, 23:07   #4
dotmeer
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 14
По умолчанию

прошу прощения, забыл указать значения, которые загружаются, так сказать, по умолчанию
фон (97, 97, 97)
красный (102, 1, 0)
синий (0, 88, 100)
dotmeer вне форума Ответить с цитированием
Старый 31.10.2012, 21:38   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Это всё супер, но я не смогу ничего посмотреть без архива проекта. Ни времени нет собирать его с нуля, ни желания разбираться потом в чём же могут быть отличия между проектами и не закралась ли из-за различий ошибка.
phomm вне форума Ответить с цитированием
Старый 31.10.2012, 22:02   #6
dotmeer
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 14
По умолчанию

это часть большого проекта, весь его кинуть не могу, к сожалению(
вытащил кусок кода, свойства проектов идентичные, подключенные библиотеки тоже
.NET 3.5, к слову
Вложения
Тип файла: rar palitr.rar (43.3 Кб, 9 просмотров)
dotmeer вне форума Ответить с цитированием
Старый 04.11.2012, 00:48   #7
dotmeer
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 14
По умолчанию

неужели больше нет знатоков?
dotmeer вне форума Ответить с цитированием
Старый 04.11.2012, 22:46   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Так так, попрошу без взятия на "слабо".
Я был занят, только сегодня сел за Вашу задачу.
Вот набросал, думаю подойдёт.
Общая схема такая - круги рисуем на 32битную картинку, потом её же рисуем на 24битную картинку, делаем обрезку прозрачности области фона вне кругов (transparent), и рисуем на фоновую картинку (который можно и 32бит и 24 по желанию, но 32 бита при альфа не равной 255 уже будут иметь побочные эффекты). Итого 3 битмапа приходится задействовать, вместо 1.
Переписал установку цветов - добавил текстбоксы под альфу и сделал изменение картинки по кнопке (удобнее мне было при тестинге), это сути не меняет, можете как угодно тут переделать.
Вложения
Тип файла: zip Form1.zip (3.3 Кб, 17 просмотров)

Последний раз редактировалось phomm; 04.11.2012 в 22:49.
phomm вне форума Ответить с цитированием
Старый 05.11.2012, 00:35   #9
dotmeer
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 14
По умолчанию

прошу прощения, не хотел, чтобы это выглядело, как взятие "на слабо") это была попытка поднять тему и призвать, по возможности, других знатоков.
Ваше решение сейчас посмотрю, но уже спасибо за то, что Вы нашли время)
dotmeer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ рисование в pictureBox VIK_aka_TOR Помощь студентам 0 30.03.2012 01:10
PictureBox. C# Novi4ok_11 Помощь студентам 8 28.02.2011 18:24
PictureBox ne11son Общие вопросы .NET 0 14.03.2009 12:29
Прозрачность в PictureBox _Dmitry Общие вопросы .NET 3 24.06.2008 20:33