Нарисуйте изображение с пользовательской прозрачностью в GDI + - PullRequest
4 голосов
/ 14 ноября 2009

Я рисую много изображений (все размеры = 24x24 pixelformat = 32BppPArgb) в элемент управления, используя объект Drawing.Graphics и функцию DrawImage (). В моем приложении можно уменьшить масштаб, что означает, что к объекту Graphics прикреплена матрица преобразования, которая управляет масштабированием и панорамированием.

Нет смысла рисовать эти значки, когда масштаб падает ниже 50%, но я бы хотел сделать переход от рисования значков к не рисованию значков более плавным. То есть, начиная с 70%, значки должны быть нарисованы с дополнительным коэффициентом прозрачности, чтобы они стали полностью прозрачными при 50%.

Как нарисовать растровое изображение с дополнительной прозрачностью, не занимая при этом значительно больше времени, чем DrawImage ()?

Спасибо, David

1 Ответ

7 голосов
/ 15 ноября 2009

Вы просто создаете соответствующий ColorMatrix, инициализируете с ним объект ImageAttributes и передаете этот объект ImageAttributes одной из перегруженных версий Graphics.DrawImage. Этот образец даст вам 50% прозрачности:

  float[][] matrixAlpha =
  {
   new float[] {1, 0, 0, 0, 0},
   new float[] {0, 1, 0, 0, 0},
   new float[] {0, 0, 1, 0, 0},
   new float[] {0, 0, 0, 0.5f, 0}, 
   new float[] {0, 0, 0, 0, 1}
  }; 
  ColorMatrix colorMatrix = new ColorMatrix( matrixAlpha );

  ImageAttributes iaAlphaBlend = new ImageAttributes();
  iaAlphaBlend.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...