Как я создаю систему. Рисование. Значок с несколькими размерами/Изображениями?

Я хотел бы создать единую систему. Рисование. Значок программно от 32x32, 16x16 Битовые массивы. Действительно ли это возможно? Если я загружаю значок -

Icon myIcon = new Icon(@"C:\myIcon.ico");

... это может содержать повторные изображения.

10
задан Jon Seigel 24 February 2010 в 17:03
поделиться

3 ответа

Файл .ico может иметь несколько изображений в нем, но при загрузке файла .ico и создайте объект значка, загружен только один из этих изображений. Windows выбирает наиболее подходящее изображение на основе текущего режима отображения и системных настроек и использует этот для инициализации объекта System.drawing.icon , игнорируя другие.

Итак, вы не можете создать System.drawing.icon с несколькими изображениями, вы должны выбрать один, прежде чем создать объект .

Конечно, можно создать значок во время выполнения от растрового изображения, это то, что вы действительно спрашиваете? Или вы спрашиваете, как создать файл .ico?

8
ответ дан 4 December 2019 в 02:26
поделиться

Вы можете попробовать использовать PNG2ICO для создания файла .ico, вызывая его использование System.diagnostics.process.Start . Вам нужно будет создавать ваши изображения и сохранить их на диск перед вызовом PNG2ICO.

0
ответ дан 4 December 2019 в 02:26
поделиться

Там здесь хороший фрагмент кода . Он использует метод Icon.fromhandle .

Из ссылки:

/// <summary>
/// Converts an image into an icon.
/// </summary>
/// <param name="img">The image that shall become an icon</param>
/// <param name="size">The width and height of the icon. Standard
/// sizes are 16x16, 32x32, 48x48, 64x64.</param>
/// <param name="keepAspectRatio">Whether the image should be squashed into a
/// square or whether whitespace should be put around it.</param>
/// <returns>An icon!!</returns>
private Icon MakeIcon(Image img, int size, bool keepAspectRatio) {
  Bitmap square = new Bitmap(size, size); // create new bitmap
  Graphics g = Graphics.FromImage(square); // allow drawing to it

  int x, y, w, h; // dimensions for new image

  if(!keepAspectRatio || img.Height == img.Width) {
    // just fill the square
    x = y = 0; // set x and y to 0
    w = h = size; // set width and height to size
  } else {
    // work out the aspect ratio
    float r = (float)img.Width / (float)img.Height;

    // set dimensions accordingly to fit inside size^2 square
    if(r > 1) { // w is bigger, so divide h by r
      w = size;
      h = (int)((float)size / r);
      x = 0; y = (size - h) / 2; // center the image
    } else { // h is bigger, so multiply w by r
      w = (int)((float)size * r);
      h = size;
      y = 0; x = (size - w) / 2; // center the image
    }
  }

  // make the image shrink nicely by using HighQualityBicubic mode
  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
  g.DrawImage(img, x, y, w, h); // draw image with specified dimensions
  g.Flush(); // make sure all drawing operations complete before we get the icon

  // following line would work directly on any image, but then
  // it wouldn't look as nice.
  return Icon.FromHandle(square.GetHicon());
} 
0
ответ дан 4 December 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: