#c# #system.drawing.graphics
#c# #system.drawing.graphics
Вопрос:
Система.Исключение ArgumentException: ‘Параметр недопустим.’
Это первый раз, когда я попытался поиграть с матрицей и преобразованиями. В любом случае…
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Transform = m_Vars.TransformMatrix;
g.Clear (m_Vars.ClearColor);
g.FillRectangle (m_Vars.FillBrush , m_Vars.DrawRectangle);
g.DrawRectangle (m_Vars.LinePen , m_Vars.DrawRectangle);
if (m_Vars.DrawCrossSection)
{
g.DrawLine (m_Vars.LinePen , m_Vars.DrawRectangle_TopMidpoint , m_Vars.DrawRectangle_BottomMidpoint);
g.DrawLine (m_Vars.LinePen , m_Vars.DrawRectangle_LeftMidpoint , m_Vars.DrawRectangle_RightMidpoint);
}
Invalidate ();
}
Исключение генерируется в «g.Преобразование = m_Vars.transformMatrix».
Locals показывает, что моя желаемая новая матрица имеет 6 значений:
0.1, 0.0
0.0, 0.0
0.0, 0.0
— Когда я создаю эту матрицу преобразования замены, я использую «new Matrix ()», которая создает идентификационную матрицу.
Является ли моя новая матрица проблемой или это система.Проблема с рисованием? Кроме того, возможно, какой-либо обходной путь?
Комментарии:
1. Система. Рисование никогда не является проблемой, когда оно сообщает вам, что вы используете его неправильно. Итак, да, ваша матрица неверна, GDI не поддерживает нелинейные преобразования. Рассмотрите возможность использования матричных методов для преобразования матрицы идентификаторов в ту, которую вы хотите.
2. Это строки создания моей матрицы. newMatrix.Shear((float)m_TransformMatrixSheerXNumericUpDown.Value, (float)m_TransformMatrixSheerYNumericUpDown.Value); newMatrix.Scale((float)m_TransformMatrixScaleXNumericUpDown.Value, (float)m_TransformMatrixScaleYNumericUpDown.Value); newMatrix.Translate((с плавающей точкой)m_TransformMatrixTranslateXNumericUpDown.Value, (с плавающей точкой)m_TransformMatrixTranslateYNumericUpDown.Value); newMatrix.Rotate((с плавающей точкой)m_TransformMatrixRotateNumericUpDown.Value);
3. » learn.microsoft.com/en-us/dotnet/framework/winforms/advanced / … » объясняет, что происходит, когда я вызываю эти методы, но, похоже, ничего не говорит о назначении матрицы графике. Преобразование. Я хотел бы знать, почему назначение матрицы графике не работает. » learn.microsoft.com/en-us/windows/desktop/gdiplus / … » также содержит больше информации о матрицах.
4. Через систему. Рисование. Graphics :: Sheer ничего не делает (только через графику. Преобразование. Сдвиг(dx, dy)). Масштаб должен быть больше нуля. Поворот работает и перевод работает.