Извлечение иконки из файла

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by #Smith, 6 Aug 2010.

  1. #Smith

    #Smith New Member

    Joined:
    20 Jun 2010
    Messages:
    97
    Likes Received:
    2
    Reputations:
    0
    Недавно гулял по интернету и наткнулся на интересный код.

    Код Delphi:

    Code:
    var
      MyIcon: TIcon;
    begin
      MyIcon := TIcon. Create;
      try
        MyIcon.Handle := ExtractIcon(hInstance, 'MYPROG.EXE', 0)
        MyIcon.SaveToFile('Icon1.ico');
      finally
        MyIcon.Free;
      end;
    end;

    Теперь о том, почему он интересный:
    При сохранении теряются нормальные цвета.
    Это наглядно доказывает следующий код.

    Код Delphi:

    Code:
    var
      MyIcon: TIcon;
    begin
      MyIcon := TIcon. Create;
      try
        MyIcon.Handle := ExtractIcon(hInstance, 'MYPROG.EXE', 0)
        Image1.Picture.Icon.Assign(MyIcon);
      finally
        MyIcon.Free;
      end;
    end;
    В этом случае мы наглядно видим иконку со вполне здоровыми цветами.
    Было бы интересно узнать в чём же причина потери цветов?
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну канвас он по дефолту вроде как 24 битны. А иконка может и не быть по дефолту таковой.
    Или же быть для разных количеств цветов. Когда сохраняешь, то погляди скольки битная на выходе получается иконка. Решением может быть - или установка глубици цвета насильно или использование промежуточного битмапа