Изображение низкого качества в заголовке TabPage с использованием TabControl ImageList

У меня проблема с качеством изображения, отображаемого в заголовке TabPage. Мое исходное изображение 16x16 png с прозрачностью. Когда я загружаю его в заголовок TabPage, качество ужасное. До сих пор лучшее, что я смог придумать, это использовать 8-битный png вместо 32-битного png. Это значительно помогает, но качество все еще не так хорошо, как хотелось бы, и все еще не так хорошо, как 32-битный png. У кого-нибудь есть хороший способ сохранить качество png?

(32-битный оригинал слева. 32-битный заголовок табуляции более низкого качества справа.)

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

(8-битный оригинал слева. 8-битный заголовок табуляции более низкого качества справа.)

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

(32-битный оригинал слева. 8-битный заголовок табуляции более низкого качества справа.)

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

Я пытаюсь/надеюсь сделать его как можно ближе к оригинальному 32-битному png.

Я использую следующий код:

using System.Drawing;
using System.Windows.Forms;

public class Form1
{
    public void Form1()
    {
        InitializeComponent();

        // initialize the imagelist
        ImageList imageList1 = new ImageList();
        imageList1.Images.Add("key1", Properties.Resources.Image1png);
        imageList1.Images.Add("key2", Properties.Resources.Image2png);

        //initialize the tab control
        TabControl tabControl1 = new TabControl();
        tabControl1.Dock = DockStyle.Fill;
        tabControl1.ImageList = imageList1;
        tabControl1.TabPages.Add("tabKey1", "TabText1", "key1"); 
        tabControl1.TabPages.Add("tabKey2", "TabText2", "key2");
        this.Controls.Add(tabControl1);
    }
}

person dizzy.stackoverflow    schedule 04.02.2015    source источник
comment
сфоткайте пожалуйста и посмотрим о чем ужасном вы говорите.   -  person David    schedule 04.02.2015
comment
@David - я добавил ссылки на изображения выше. Спасибо.   -  person dizzy.stackoverflow    schedule 04.02.2015


Ответы (2)


Не уверен, что это отвечает на ваш вопрос, но нужно опубликовать его как ответ, чтобы включить снимок.

Вы можете попробовать ниже:

  1. Выберите список изображений;
  2. Настройте свойство ColorDepth и установите для него значение с «Depth8bit» на «Depth32bit».

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

Или просто измените его в коде:

imageList1.ColorDepth = ColorDepth.Depth32Bit;
person David    schedule 04.02.2015
comment
Спасибо за предложение. Здесь уже поздно и у меня горят глаза, и в данный момент все выглядит размыто. :) Я оценю это более тщательно утром, когда мои глаза будут свежими, и тогда я отчитаюсь, чтобы сообщить вам. - person dizzy.stackoverflow; 04.02.2015
comment
Нет, качество определенно ухудшается. :) Я экспериментировал с ним последние 10 минут, и на данный момент я думаю, что лучшая комбинация - это когда я использую 8-битное изображение, но устанавливаю глубину цвета на 32 бита. Использование 32-битного изображения с 32-битной глубиной цвета по-прежнему значительно изменяет изображение, даже если оно лучше, чем при глубине цвета 8 бит. Завтра я сделаю больше тестов и опубликую больше изображений в этой теме. Спасибо еще раз. - person dizzy.stackoverflow; 04.02.2015
comment
Ну, я все еще нахожу все это немного странным. Кажется, лучшее, что я могу получить, это использовать 8-битное изображение, а затем установить глубину цвета на 32 бита в списке изображений. Я собираюсь отметить это как ответ, потому что этого будет достаточно, хотя я до сих пор не могу получить исходное 32-битное качество изображения в заголовке вкладки. Спасибо за помощь. - person dizzy.stackoverflow; 04.02.2015

В ImageList (связанном с TabControl) удалите все изображения и снова добавьте их в том же порядке.

Это единственный способ, которым это работает для меня!

person dbardelas    schedule 17.10.2016