2009-10-28

Zła jakość ikon w ToolStrip

Jeśli w toolbarze mamy ustawiony rozmiar wyświetlania obrazków (ImageScalingSize) inny od natywnego rozmiaru obrazków, to zmuszamy system by go za nas przeskalował. Problem w tym, że radzi on sobie z tym wyjątkowo nieudolnie (obrazki wychodzą kiepskiej jakości). Nie udało mi się w żaden sposób wpłynąć na ten proces, tak więc nie pozostało nic innego zrobienie ręcznego skalowania podczas uruchamiania aplikacji. Poniższy kod trzeba będzie rozbudować jeśli w naszej aplikacji podczas jej działania dopuszczamy zmianę wielkości ikon toolbara. Samo przeskalowanie jest stosunkowe prosta:
for (int i = 0; i < toolStrip.Items.Count; i++)
{
    if (toolStrip.Items[i].Image != null)
    {
        toolStrip.Items[i].Image = toolStrip.Items[i].Image.GetThumbnailImage(
            toolStrip.ImageScalingSize.Width, toolStrip.ImageScalingSize.Height, null, IntPtr.Zero);
    }
}
Jeśli to rzeczywiście błąd, a nie, że tylko ja nie wiem, gdzie ustawić jaką właściwość, to jest to dość fatalny błąd. Inna sprawa czemu kolekcja Items nie bazuje na typach generycznych, żeby foreach nie zwracało obiektów typu Object. Ten problem jest zresztą bardziej powszechny. Np. Enum.GetValues zwraca obiekt typu Array. Może to kiedyś uporządkują, choć będzie się to wiązało z utratą kompatybilności wstecz.