Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
8 / 8 / 1
Регистрация: 10.11.2009
Сообщений: 36
1

Картинка произвольной формы

28.02.2010, 15:42. Показов 2496. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как вывести на форму изображение произвольной формы(что нибудь типа регионов) подскажите пожалуйста кто знает...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2010, 15:42
Ответы с готовыми решениями:

Рисование произвольной границы формы
собственно вопрос в том, возможно-ли из шарпов изменять хотя-бы цвет, а по возможности и стиль...

Создание произвольной формы окна
Доброго времени суток.В делфи 7 можно создать круглую,треугольную и т.д. форму.Можно ли это сделать...

Визуальный компонент - кнопка произвольной формы
Мне нужно разработать визуальный компонент – овальную кнопку. Так, что бы он появился в "Панели...

Окна произвольной формы
Привет всем! Начали мы с другом писать программку на C#, и больно захотелось нам гламура . Мы...

9
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
28.02.2010, 17:12 2
Трудно, но можно. ПРосто режите катинки и загружаете в пикчербокс, фон делаете магента и цвет прозрачности тоже магента, тем самым остальное будет скрыто.
0
8 / 8 / 1
Регистрация: 10.11.2009
Сообщений: 36
28.02.2010, 19:28  [ТС] 3
brugon
Не, так я делал.
Слишком много контролов получается... тормоза...
мне надо чтоб все фрагменты картинки находились на одном элементе управления без дополнительных элементов(таких как пикчербокс)
0
45 / 45 / 18
Регистрация: 15.03.2009
Сообщений: 178
01.03.2010, 03:33 4
Могу предложить такой способ: отредактируйте картинку например, в редакторе фотошоп, т.е. выделите картинку по самому краю, для удаления лишнего, затем сохраните в формате gif с прозрачным фоном. После помещения на форму не забудьте фон картинки указать прозрачным.
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
01.03.2010, 08:42 5
Значит нужно просчитывать положение мышки над контрлом и делать прорисовку выделения той части.
0
8 / 8 / 1
Регистрация: 10.11.2009
Сообщений: 36
01.03.2010, 09:45  [ТС] 6
brugon
а как это сделать? (прорисовку выделения той части.)

Eva_yk
какрас вот так мне не надо, программа должна работать с любыми изображениями...
0
Заблокирован
01.03.2010, 13:22 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private void button3_Click(object sender, EventArgs e)
        {
             // Загружаем картинку из файла.
            Image image = Image.FromFile(@"C:\4a15957b5f3d0.jpg");
            // Создаем объект Graphics для формы.
            Graphics g = this.CreateGraphics();
                
            // Выводим левую часть нашего изображения.
            Rectangle rect = new Rectangle(0, 0, 50, 50);
            g.DrawImage(image, 10, 10, 
                rect, GraphicsUnit.Pixel);
            // Выводим правую часть нашего изображения.
            rect = new Rectangle(50, 0, 50, 50);
            g.DrawImage(image, 100, 10, 
                rect, GraphicsUnit.Pixel);
 
        }
0
8 / 8 / 1
Регистрация: 10.11.2009
Сообщений: 36
01.03.2010, 18:54  [ТС] 8
ssv_www
это прямоугольники, это мне не надо

Добавлено через 2 часа 5 минут
все. Решил проблему.
Вот, если кому интересно
grfx.SetClip(dif.matrix[i][j].path, CombineMode.Replace);
grfx.DrawImage(img, dif.matrix[i][j].pt.X, dif.matrix[i][j].pt.Y, dif.matrix[i][j].rec, GraphicsUnit.Pixel);
0
Заблокирован
01.03.2010, 19:02 9
напиши пожалуйста полный листинг. Может и понадобится
0
8 / 8 / 1
Регистрация: 10.11.2009
Сообщений: 36
01.03.2010, 19:41  [ТС] 10
полный выложить не могу, многовато будет...
вот:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
matrix[ii][jj].path = new GraphicsPath();
dif.matrix[ii][jj].path.AddBezier(dif.matrix[ii][jj].pt.X + 20, dif.matrix[ii][jj].pt.Y + 20,
                                                  dif.matrix[ii][jj].pt.X + 40, dif.matrix[ii][jj].pt.Y + 50,
                                                  dif.matrix[ii][jj].pt.X + 40, dif.matrix[ii][jj].pt.Y + 50,
                                                  dif.matrix[ii][jj].pt.X + 20, dif.matrix[ii][jj].pt.Y + 80);        //  ___0
                dif.matrix[ii][jj].path.AddBezier(dif.matrix[ii][jj].pt.X + 20, dif.matrix[ii][jj].pt.Y + 80,
                                                  dif.matrix[ii][jj].pt.X + 50, dif.matrix[ii][jj].pt.Y + 100,
                                                  dif.matrix[ii][jj].pt.X + 50, dif.matrix[ii][jj].pt.Y + 100,
                                                  dif.matrix[ii][jj].pt.X + 80, dif.matrix[ii][jj].pt.Y + 80);        //  __1_
                dif.matrix[ii][jj].path.AddBezier(dif.matrix[ii][jj].pt.X + 80, dif.matrix[ii][jj].pt.Y + 80,
                                                  dif.matrix[ii][jj].pt.X + 100, dif.matrix[ii][jj].pt.Y + 50,
                                                  dif.matrix[ii][jj].pt.X + 100, dif.matrix[ii][jj].pt.Y + 50,
                                                  dif.matrix[ii][jj].pt.X + 80, dif.matrix[ii][jj].pt.Y + 20); //  _1__
                dif.matrix[ii][jj].path.AddBezier(dif.matrix[ii][jj].pt.X + 80, dif.matrix[ii][jj].pt.Y + 20,
                                                  dif.matrix[ii][jj].pt.X + 50, dif.matrix[ii][jj].pt.Y + 40,
                                                  dif.matrix[ii][jj].pt.X + 50, dif.matrix[ii][jj].pt.Y + 40,
                                                  dif.matrix[ii][jj].pt.X + 20, dif.matrix[ii][jj].pt.Y + 20);    //  0___
это сосдание регионов(с возможностью дальнейшего перемещения)(используется в OnMouseMove)

соответсвенно OnPaint:

C#
1
2
grfx.SetClip(dif.matrix[i][j].path, CombineMode.Replace);
                    grfx.DrawImage(img, dif.matrix[i][j].pt.X, dif.matrix[i][j].pt.Y, dif.matrix[i][j].rec, GraphicsUnit.Pixel);
П.с. соответсвенно возникла новая проблема:
как определить наличие конкретной точки в GraphicsPath(т.е. при клике по нему мышью надо об этом знать)))
0
01.03.2010, 19:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2010, 19:41
Помогаю со студенческими работами здесь

CorelDraw: как получить площадь кривой произвольной формы, в которой есть "дырки" произвольной формы?
Стоит задача рассчитать площадь сложной кривой. В CorelDraw у кривых есть стандартное свойство,...

Картинка в ячейке таблицы формы (для управляемой и обычной формы)
1. Можно ли программно вывести картинку (которая пропорционально уменьшится или увеличиться в...

Форма произвольной формы
Решил попробовать создавать формы произвольной формы по битовой матрице. Вроде всё получилось....

Окно произвольной формы
Здравствуйте, подскажите пожалуйста как сделать окно произвольной формы, в даном случаее меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru