Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
FutureCome
104 / 104 / 9
Регистрация: 19.12.2010
Сообщений: 417
Завершенные тесты: 2
#1

Graphics.DrawEllipse() обрезает нижнюю и правую границы круга - C#

19.08.2013, 21:49. Просмотров 1046. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Простите за глупый вопрос, но самому исправить не получилось.
Имеется рисование эллипса:
C#
1
2
3
4
public override void Draw(Graphics g, RectangleF clip)
{
    g.DrawEllipse(Pen, clip);
}
Параметр g получен так:
C#
1
graphics = pbShapeImage.CreateGraphics();
Где pbShapeImage - это экземпляр PictureBox.
Параметр clip так:
C#
1
2
3
4
public void Draw(Graphics g)
{
    Draw(g, g.VisibleClipBounds);
}
Непосредственный вызов всего этого происходит так:
C#
1
2
3
4
5
private void cbShape_SelectedIndexChanged(object sender, System.EventArgs e)
{
        var curShape = (Shape)cbShape.SelectedItem;
        curShape.Draw(graphics);
}
Получается, прямоугольная область для рисования вычисляется автоматически через g.VisibleClipBounds (причём правильно - проверенно). Graphics.DrawEllipse() должен вписать эллипс в эту область, но обрезает его нижние и правые пиксели:
Название: Graphics.DrawEllipse() Result Image.png
Просмотров: 152

Размер: 8.0 Кб
Почему так? Он же должен нормально вписать эллипс... Как исправить?
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2013, 21:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Graphics.DrawEllipse() обрезает нижнюю и правую границы круга (C#):

Enum: как получить нижнюю и верхнюю границы, а также их значения?
День добрый! private enum mathOperation { Plus, Minus,...

Graphics.SetClip Method (GraphicsPath) и Graphics.Clear Method vs Graphics.FillPath Method (System.Drawing)
У нас два способа залить форму: 1. Graphics.SetClip Method (GraphicsPath)...

Проблемка с DrawEllipse
Подскажите пожалуйста почему ругается на DrawEllipse, пишет имя типа...

DrawEllipse. Обрезаются круги
Рисую при помощи DrawEllipse круги, но тут вот какая беда:

Задание движения для DrawEllipse
Здравствуйте ребята! Скажите как задать произвольное движение DrawElipse...

DrawEllipse с переменными double и float
Не могу понять почему функция рисования DrawEllipse не работает с типом double...

6
Graf_Nosferatu
30 / 37 / 5
Регистрация: 07.09.2011
Сообщений: 108
20.08.2013, 09:54 #2
Была такая же проблема. FillEllipse отрисовывал нормально, а Draw обрезал по 1 пикселю. Поэтому уменьши ширину и высоту на 1 пиксель и всё будет нормально.
1
FutureCome
104 / 104 / 9
Регистрация: 19.12.2010
Сообщений: 417
Завершенные тесты: 2
20.08.2013, 12:27  [ТС] #3
Возможно, у FillEllipse() это просто не заметно.
Не хочется использовать костыли...
Есть у кого идеи получше?
0
FutureCome
104 / 104 / 9
Регистрация: 19.12.2010
Сообщений: 417
Завершенные тесты: 2
20.08.2013, 14:37  [ТС] #4
Graf_Nosferatu
Попробовал сделать с Graphics.FillEllipse() проблема стала менее заметной и немного меняется.
Обратите на размер полученного круга:
Graphics.DrawEllipse() обрезает нижнюю и правую границы круга
Должен быть 50*50, а на деле - 50*49.
Если по вертикали смог отрисовать 50 пикселей, то почему по горизонтали смог всего лишь 49?
Как же исправить это без костылей типа "уменьшать VisibleClipBounds на единицу по бокам" или "использовать FillEllipse()"?
Заранее спасибо.

Не по теме:

Хех. Только что редактировал в редакторе картинку редактора с картинкой, на которой изображён неправильный заполненный круг.

0
Graf_Nosferatu
30 / 37 / 5
Регистрация: 07.09.2011
Сообщений: 108
20.08.2013, 20:41 #5
Судя по рисунку по горизонтали произошел сдвиг на 1 пиксель вправо
1
phantom96
MЫW
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
20.08.2013, 21:32 #6
Надо типо везде границы 0 выставить попробовать.
1
FutureCome
104 / 104 / 9
Регистрация: 19.12.2010
Сообщений: 417
Завершенные тесты: 2
22.08.2013, 19:17  [ТС] #7
phantom96
Margin и Padding? И так по нулям. Это первое, что пришло мне в голову... Но... Увы.
Graf_Nosferatu
Если предположить, что это действительно так, то при попытке сдвинуть его на один пиксель налево получим такую же картину слева.
0
22.08.2013, 19:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 19:17
Привет! Вот еще темы с решениями:

Graphics.DrawImageUnscaled и есть Graphics.DrawImage
Подскажите пожалуйста. Чем отличаются методы Graphics.DrawImageUnscaled и есть...

FillEllipse, DrawEllipse, внутри "прмитив" методом DrawLines не масштабируется
Привет всем! Методами FillEllips, DrawEllips выводится собственно сам эллипс...

Как сделать так, чтобы границы дочерней формы не "уходили" за границы родительской
Всем доброго времени суток! Возник следующий вопрос. Создаю MDI-приложение....

Как правильно вычислить правую и нижнюю границу блоков?
Имеется блок, внутри которого расположены несколько разных по размеру блоков,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru