Возьмите свое растровое изображение 256x256 и просто проверьте альфа. Убедитесь, что bmp 32 бит. Любая часть, имеющая 0 для значения пикселя (то есть BGRA 0,0,0,0, для доступа используйте TBitmap.Scanline
), является прозрачной. Вы можете найти наименьшую координату x и наименьшую y, которая имеет ненулевое значение, и это фактический размер вашей иконки. Теперь это число может быть меньше, чем «размер иконки», как было задумано. Например, значок 16x16 может содержать изображение 2x2, что было бы странным дизайном.
Но, конечно, значок 8x16 вполне возможен. Учитывая, что изображения всегда квадратные, возьмите максимальное значение, если найдены координаты x и y (с и высотой фактического изображения), и округлите его до ближайшего значения 16,24,32,48,64,128 или 256. Вы можете быть совершенно уверены что у вас будет значок в центре вашего растрового изображения, если вы обрежете его до следующего размера. Use Bmp.Width=sz; Bmp.Height=sz;
.
Затем вы можете увеличить его или центрировать на стандартном растровом изображении (56x56? 256x256?).
Таким образом, даже если Windows не хочет дать вам нужную информацию, вы можете обойтись без этой информации, просто выяснив себя. Возможно, это не «правильный» способ сделать это, но вы будете знать, что он будет работать, когда вы закончите, в отличие от просмотра MSDN в течение 4 часов и отсутствия ответа.