Не могу вставить картинку .cur в PictureBox
Цитата: Удаленный пользователь от 05.08.2022, 15:17Добрейшего,
Я делаю программу, которая должна отобразить все курсоры в PictureBox'ы [spoiler title="Где хранятся курсоры"]
HKEY_CURRENT_USER\Control Panel\Cursors[/spoiler]
Но проблема, PictureBox пишет ".curне является допустимым типом ресурса"Ещё я попробовал через конвертер .cur в .png, получилось, но чтобы программа нормально работала, надо сделать конвертер в c#
У меня не получилось, то пишет недостаточно памяти, то параметр указан не верно
[spoiler title="Два способа"]using (Image image1 = Image.FromFile(@"C:\Users\ВМП-Уфа\Desktop\Arrow.cur", true)) image1.Save(@"C:\Users\ВМП-Уфа\Desktop\Arrow.png", ImageFormat.Png); Image bmp = new Bitmap(@"C:\Users\ВМП-Уфа\Desktop\Arrow.cur"); bmp.Save(@"C:\Users\ВМП-Уфа\Desktop\Arrow.png", ImageFormat.Png);[/spoiler]
Кто знает как сделать конвертер или как запихнуть .cur в pictureBox?
Добрейшего,
Я делаю программу, которая должна отобразить все курсоры в PictureBox'ы
СкопированоHKEY_CURRENT_USER\Control Panel\CursorsНо проблема, PictureBox пишет "
Скопировано.cur не является допустимым типом ресурса"
Ещё я попробовал через конвертер .cur в .png, получилось, но чтобы программа нормально работала, надо сделать конвертер в c#
У меня не получилось, то пишет недостаточно памяти, то параметр указан не верно
using (Image image1 = Image.FromFile(@"C:\Users\ВМП-Уфа\Desktop\Arrow.cur", true))
image1.Save(@"C:\Users\ВМП-Уфа\Desktop\Arrow.png" style="color: #25d39d !important", ImageFormat.Png);
Image bmp = new Bitmap(@"C:\Users\ВМП-Уфа\Desktop\Arrow.cur");
bmp.Save(@"C:\Users\ВМП-Уфа\Desktop\Arrow.png" style="color: #25d39d !important", ImageFormat.Png);
Кто знает как сделать конвертер или как запихнуть .cur в pictureBox?
Цитата: Удаленный пользователь от 05.08.2022, 17:15Добрый день.
Может поможет - https://stackoverflow.com/a/18398380
Добрый день.
Может поможет - https://stackoverflow.com/a/18398380
Цитата: Удаленный пользователь от 05.08.2022, 17:28Офигеть спасибо оооогромное!!! Я целый день гуглил на разных языках, не нашёл и тут вы как БОГ с небес
[spoiler title="КОД, если кому-то лень искать в ссылке"]
Icon i = Icon.ExtractAssociatedIcon(@"C:\Users\ВМП-Уфа\Desktop\Arrow.cur"); pictureBox.BackgroundImage = i.ToBitmap(); // Преобразовал и отобразил в pictureBox
[/spoiler]
Офигеть спасибо оооогромное!!! Я целый день гуглил на разных языках, не нашёл и тут вы как БОГ с небес
Icon i = Icon.ExtractAssociatedIcon(@"C:\Users\ВМП-Уфа\Desktop\Arrow.cur");
pictureBox.BackgroundImage = i.ToBitmap();
// Преобразовал и отобразил в pictureBox
Цитата: Удаленный пользователь от 05.08.2022, 18:47Ну не знаю, может у вас неправильный 🙂
Я это сам нагуглил секунд за 30...
Ну не знаю, может у вас неправильный 🙂
Я это сам нагуглил секунд за 30...
Цитата: Удаленный пользователь от 06.08.2022, 09:08🖐 Приветствую. Вставлю свои три копейки. Возможно, стоит обратить внимание на тот факт, что метод
Icon.ExtractAssociatedIcon()возвращает размер 32x32 или 16x16. Точно не помню. Так что я от него ранее отказался в контексте моих задач. Удачи в начинаниях.
🖐 Приветствую. Вставлю свои три копейки. Возможно, стоит обратить внимание на тот факт, что метод Icon.ExtractAssociatedIcon()возвращает размер 32x32 или 16x16. Точно не помню. Так что я от него ранее отказался в контексте моих задач. Удачи в начинаниях.
Цитата: Удаленный пользователь от 06.08.2022, 09:14Цитата: Viktor от 06.08.2022, 09:08
Приветствую. Вставлю свои три копейки. Возможно, стоит обратить внимание на тот факт, что метод
Icon.ExtractAssociatedIcon()
Icon.ExtractAssociatedIcon()возвращает размер 32x32 или 16x16. Точно не помню. Так что я от него ранее отказался в контексте моих задач. Удачи в начинаниях.Приветствую. Ну тут речь о курсорах. Вероятно этого разрешения будет достаточно (не знаю какое стандартное разрешение у курсоров). Да и я особо не вникал, в гугле полно инвы на данную тему, дал линк на первый попавшийся ответ.
Цитата: Viktor от 06.08.2022, 09:08
Приветствую. Вставлю свои три копейки. Возможно, стоит обратить внимание на тот факт, что метод
Icon.ExtractAssociatedIcon()
Icon.ExtractAssociatedIcon()возвращает размер 32x32 или 16x16. Точно не помню. Так что я от него ранее отказался в контексте моих задач. Удачи в начинаниях.
Приветствую. Ну тут речь о курсорах. Вероятно этого разрешения будет достаточно (не знаю какое стандартное разрешение у курсоров). Да и я особо не вникал, в гугле полно инвы на данную тему, дал линк на первый попавшийся ответ.
Цитата: Удаленный пользователь от 06.08.2022, 10:03Приветствую. Ну тут речь о курсорах. Вероятно этого разрешения будет достаточно (не знаю какое стандартное разрешение у курсоров). Да и я особо не вникал, в гугле полно инвы на данную тему, дал линк на первый попавшийся ответ.
🙂 Я хотел обратить внимание автора темы в контексте его задачи. Сам я не сразу заметил этот нюанс. [spoiler title="Немного оффтопа"] Мне попаля код в гите, который компонует иконку. Везде формате .ico(части Directory) первые 2byte это ширина и высота. Я решил проверить, а что произойдет если в методе указать больше размеры. Взял 2048x2048, и оно собралось без проблем. Не пойму как получается болше размер, если диапазон 1 byte.
public static bool ConvertToIcon(Bitmap inputBitmap, Stream output) { if (inputBitmap is null) return false; int[] sizes = new int[] { 512, 256, 96, 80, 72, 64, 60, 48, 40, 36, 32, 30, 24, 16 }; // Generate bitmaps for all the sizes and toss them in streams List<MemoryStream> imageStreams = new List<MemoryStream>(); foreach (int size in sizes) { Bitmap newBitmap = ResizeImage(inputBitmap, size, size); if (newBitmap is null) return false; MemoryStream memoryStream = new MemoryStream(); newBitmap.Save(memoryStream, ImageFormat.Png); imageStreams.Add(memoryStream); } BinaryWriter iconWriter = new BinaryWriter(output); if (output is null || iconWriter is null) return false; int offset = 0; // 0-1 reserved, iconWriter.Write((short)0); // 2-3 image type, 1 = icon, 2 = cursor iconWriter.Write((short)1); // 4-5 number of images iconWriter.Write((short)sizes.Length); offset += 6 + (16 * sizes.Length); for (int i = 0; i < sizes.Length; i++) { // image entry 1 // 0 image width iconWriter.Write((byte)sizes[i]); // 1 image height iconWriter.Write((byte)sizes[i]); // 2 number of colors iconWriter.Write((byte)0); // 3 reserved iconWriter.Write((byte)0); // 4-5 color planes iconWriter.Write((short)0); // 6-7 bits per pixel iconWriter.Write((short)32); // 8-11 size of image data iconWriter.Write((int)imageStreams[i].Length); // 12-15 offset of image data iconWriter.Write((int)offset); offset += (int)imageStreams[i].Length; } for (int i = 0; i < sizes.Length; i++) { // write image data // png data must contain the whole png data file iconWriter.Write(imageStreams[i].ToArray()); imageStreams[i].Close(); } iconWriter.Flush(); return true; }[/spoiler]
P.S Не знаю как добавить спойлер в спойлер. 😐
Приветствую. Ну тут речь о курсорах. Вероятно этого разрешения будет достаточно (не знаю какое стандартное разрешение у курсоров). Да и я особо не вникал, в гугле полно инвы на данную тему, дал линк на первый попавшийся ответ.
🙂 Я хотел обратить внимание автора темы в контексте его задачи. Сам я не сразу заметил этот нюанс.
public static bool ConvertToIcon(Bitmap inputBitmap, Stream output)
{
if (inputBitmap is null) return false;
int[] sizes = new int[] { 512, 256, 96, 80, 72, 64, 60, 48, 40, 36, 32, 30, 24, 16 };
// Generate bitmaps for all the sizes and toss them in streams
List<MemoryStream> imageStreams = new List<MemoryStream>();
foreach (int size in sizes)
{
Bitmap newBitmap = ResizeImage(inputBitmap, size, size);
if (newBitmap is null) return false;
MemoryStream memoryStream = new MemoryStream();
newBitmap.Save(memoryStream, ImageFormat.Png);
imageStreams.Add(memoryStream);
}
BinaryWriter iconWriter = new BinaryWriter(output);
if (output is null || iconWriter is null) return false;
int offset = 0;
// 0-1 reserved,
iconWriter.Write((short)0);
// 2-3 image type, 1 = icon, 2 = cursor
iconWriter.Write((short)1);
// 4-5 number of images
iconWriter.Write((short)sizes.Length);
offset += 6 + (16 * sizes.Length);
for (int i = 0; i < sizes.Length; i++)
{
// image entry 1
// 0 image width
iconWriter.Write((byte)sizes[i]);
// 1 image height
iconWriter.Write((byte)sizes[i]);
// 2 number of colors
iconWriter.Write((byte)0);
// 3 reserved
iconWriter.Write((byte)0);
// 4-5 color planes
iconWriter.Write((short)0);
// 6-7 bits per pixel
iconWriter.Write((short)32);
// 8-11 size of image data
iconWriter.Write((int)imageStreams[i].Length);
// 12-15 offset of image data
iconWriter.Write((int)offset);
offset += (int)imageStreams[i].Length;
}
for (int i = 0; i < sizes.Length; i++)
{
// write image data
// png data must contain the whole png data file
iconWriter.Write(imageStreams[i].ToArray());
imageStreams[i].Close();
}
iconWriter.Flush();
return true;
}
P.S Не знаю как добавить спойлер в спойлер. 😐
Цитата: Удаленный пользователь от 06.08.2022, 10:19Я когда делал FastToIcon тоже по куче граблей прошелся, т.к. в C# стандартные средства работы с иконками кривые как не знаю что, много что пришлось на WinAPI переделать дергая нужные функции из DLL.
Я когда делал FastToIcon тоже по куче граблей прошелся, т.к. в C# стандартные средства работы с иконками кривые как не знаю что, много что пришлось на WinAPI переделать дергая нужные функции из DLL.
Цитата: Удаленный пользователь от 06.08.2022, 10:35Цитата: Adler от 06.08.2022, 10:19Я когда делал FastToIcon тоже по куче граблей прошелся, т.к. в C# стандартные средства работы с иконками кривые как не знаю что, много что пришлось на WinAPI переделать дергая нужные функции из DLL.
Я пользовался FastToIcon . Я сейчас платформой в своем приложении занимаюсь. Не успел ещё внедрить исходный код класса . Он в лучшем виде изображение до нужного размера сжимает, помещает все размеры которые тебе нужны в Icon. Возможно тебе такое будет интересно ❓
Цитата: Adler от 06.08.2022, 10:19Я когда делал FastToIcon тоже по куче граблей прошелся, т.к. в C# стандартные средства работы с иконками кривые как не знаю что, много что пришлось на WinAPI переделать дергая нужные функции из DLL.
Я пользовался FastToIcon . Я сейчас платформой в своем приложении занимаюсь. Не успел ещё внедрить исходный код класса . Он в лучшем виде изображение до нужного размера сжимает, помещает все размеры которые тебе нужны в Icon. Возможно тебе такое будет интересно ❓
Цитата: Удаленный пользователь от 06.08.2022, 18:28Как бы его я и не использовал. По крайней мере на вскидку очень похоже. Доберусь до исходников посмотрю.
Как бы его я и не использовал. По крайней мере на вскидку очень похоже. Доберусь до исходников посмотрю.