Мне было интересно, может ли кто-нибудь направить меня или вести меня, чтобы использовать .gif-образ и преобразовать его в файл изображения полосы .bmp.Преобразование анимированного файла .gif в полосу .bmp
ответ
Загрузите .gif в растровое изображение и сохраните его в .bmp. Если вы хотите экспортировать фреймы .gif, я понятия не имею, как это сделать. Вы можете посмотреть на это www.eggheadcafe.com/articles/stripimagefromanimatedgif.asp, это, кажется, то, что вы ищете.
Я рассмотрел этот пример раньше, и он не делал то, что я хотел, хотя этот пример разделяет каждый кадр с .gif на отдельные изображения, но я хочу, чтобы эти изображения были сшиты вместе в одно изображение. – SpaceApple
метод, что работает точно есть:
- Скачать инсталляционный Easy GIF Animator
- Открыть тур GIF с ним и экспортировать кадры в отдельные файлы
- Скачать и установить любую программу, которая может создать слои (например, Photoshop CS3 Little)
- Создайте новую ширину файла как свое изображение; Высота = Высота вашего рисунка. X количество фотографий
- Скопируйте каждый рисунок. как слои в ваш новый файл и перемещать их один за другим.
- Сохранить его как .png файл
- Скачать установить IPaQ 31x Image Explorer
- Открой .png в нем
- Сохранить это как ARGB файл (обычный BMP может не работать)
- Done !!
Может быть, это не самый простой метод, но он дает возможность точного редактирования и позволяет сделать полоски иконок, которые находятся на прозрачном фоне (но не ограничиваясь иконками)
Во-первых, вам нужно получить размер gif. Затем вам нужно выяснить, сколько кадров есть.
После этого вам нужно создать новое изображение с Height = original height и Width = Frames * Gif Width.
Затем вы должны вставить оригинальные кадры Gif в полоску так: Frame N начинается с пикселя N * Ширина.
То есть, если вы делаете горизонтальную полосу.
А вот полный код консольного приложения:
using System.Drawing;
using System.Drawing.Imaging;
foreach (var arg in args)
{
Image gif = Image.FromFile(arg);
FrameDimension dim = new FrameDimension(gif.FrameDimensionsList[0]);
int frames = gif.GetFrameCount(dim);
Bitmap resultingImage = new Bitmap(gif.Width * frames, gif.Height);
for (int i = 0; i < frames; i++)
{
gif.SelectActiveFrame(dim, i);
Rectangle destRegion = new Rectangle(gif.Width * i, 0, gif.Width, gif.Height);
Rectangle srcRegion = new Rectangle(0, 0, gif.Width, gif.Height);
using (Graphics grD = Graphics.FromImage(resultingImage))
{
grD.DrawImage(gif, destRegion, srcRegion, GraphicsUnit.Pixel);
}
}
resultingImage.Save("res.png", ImageFormat.Png);
}
Полученное изображение сохраняется в скомпилирован консоли приложения каталога двоичный файл под именем res.png
. Вы можете заставить приложение сохранить результирующее изображение прямо там, где находится исходный файл, спросить, делать ли горизонтальную или вертикальную полосу и т. Д.
Создание полосы изображения можно легко сделать с помощью Photoshop (вы можете получить бесплатную пробную версию , или Элементы)
- Открытый.GIF - Photoshop будет открывать каждый кадр в качестве слоя
- Resize холст (высота GIF * слои) пикселей
- Удалить всю информацию кадра, сохранить слои
- Выберите последний слой, и переместить его в самый нижний
- Выберите все слои и нажмите «Распределить вертикальные центры». Теперь у вас есть прекрасно устроенная полоса.
Если вы используете Photoshop, вы можете просто экспортировать его как BMP. Это оно.
Что такое полоса .bmp? Вы имеете в виду анимированный .gif, и вы хотите разделить фреймы на отдельные изображения? А потом сшить их вместе бок о бок? – Rup
Класс GifBitmapEncoder? – ldgorman
Да, я действительно хочу сшить их вместе, и я не знаю, как это сделать. – SpaceApple