Я испытываю неизвестную проблему при попытке сохранить реальный 24bpp ico в файл.Сохранение 24 бит .ico в файл - Работает с отладчиком, НЕ без
Я использую IconEx.dll я нашел здесь: Vb icon thingy project
Я переписал оригинальный VB код, который вы можете увидеть там в C# (по одному).
Моя проблема странная. При запуске версии Debug/Release с использованием F5 OR с отладчиком в .exe вручную (добавив в начале sleep(), чтобы я мог легко подключить отладчик), все идет хорошо!
Когда я просто запускаю .exe (Release или Debug), пустой временный (черный) .ico записывает успех, но окончательный ico просто поврежден ... Вы видите какую-то общую проблему? я пробовал много вещей, чтобы исправить это сейчас 4 дня ... даже поставить сон() повсюду, чтобы замедлить процесс, возможно, и т. д.
Оба значка (правильный или поврежденный) имеют одинаковый размер не менее 9.43Ko
спасибо.
//create a temporary icon from a Bmp
Bitmap nwbmp = new Bitmap(48, 48, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
IntPtr pntr = nwbmp.GetHicon();
Icon nwico = Icon.FromHandle(pntr);
DestroyIcon(pntr);
using (System.IO.Stream st = new System.IO.FileStream(pathToFinaleIco, FileMode.Create)) {
System.IO.BinaryWriter wr = new System.IO.BinaryWriter(st);
nwico.Save(st);
wr.Close();
}
nwbmp.Dispose();
//create the final icon by writing in the temp one and then saving to hdd overwritting to it
Bitmap bmp = new Bitmap("path.to.file.bmp", new Size(48, 48)); //<== takes the bmp i want the ico to looks like
IconEx Iconex = new IconEx(pathToFinaleIco); //<=== load the temp ico file ill overwrite to be final one
Iconex.Items.RemoveAt(0);
IconDeviceImage IcondeviceImage = new IconDeviceImage(new Size(48, 48), ColorDepth.Depth32Bit);
IcondeviceImage.IconImage = new Bitmap(bmp);
Iconex.Items.Add(IcondeviceImage);
Iconex.Save(pathToFinaleIco);
//end
bmp.Dispose();
Так как эксперимент - попробуйте запустить ехе с административными привилегиями ... – developer82
Вы уверены, что IcondeviceImage.IconImage = новый Bitmap (BMP); верно? Должно ли это быть pathToFinaleIco, и они сохраняются где-то еще в качестве конечной иконки? Если вы нарушаете проблему пополам (создавая растровое изображение, а затем создавая значок), может быть проще отладить каждую часть - даже подумайте о реорганизации их в два метода. –
@ developer82: Выполнение как администратора не изменило проблему. Мюррей: bmp является правильным, так как он принимает снимок, который я хочу в качестве значка, чтобы «ввести его» в ico. Первая часть скрипта, создающего пустой файл ico, работает исправно, только второй не удается, повреждая файл .ico. – user3916429