Как в Delphi сохранить gif картинку |
Вплоть до версии 2010 Delphi не имела стандартных средств для работы с gif-форматом. Если же сохранять в bmp, то, когда нужно сделать большое количество картинок (например, построить много графиков), быстро обнаруживается, что жесткий диск и тем более флешки не бесконечны. К счастью уже много лет существует сторонняя разработка — класс TGIFImage. Работа с растровыми картинками в Delphi осуществляется с помощью класса TBitmap. В целом процесс получения gif картинки выглядит так: 1) Получаем картинку в виде объекта класса TBitmap. Итак, по-порядку. Как получить объект TBitmapЕсли картинка находится в компоненте Image Тогда все просто, ваш TBitmap это Image1.Picture.Bitmap. Вместо Image1, само собой, стоит имя вашего Image’а. Если картинка нарисована на Canvas’е формы или чего-нибудь еще Класс TBitmap также имеет свойство Canvas. Нужно создать объект этого класса и скопировать нужный Canvas в его Canvas методом CopyRect. Например, для формы: procedure FormToBitmap(Form: TForm; var Bmp: TBitmap); var R: TRect; begin //Задаем прямоугольную область, которая будет сохранена R.Left := 0; R.Right := Form.ClientWidth - 1; R.Top := 0; R.Bottom := Form.ClientHeight - 1; //Создаем Bitmap Bmp := TBitmap.Create; Bmp.Width := Form.ClientWidth; Bmp.Height := Form.ClientHeight; //Копируем картинку из формы в Bitmap Bmp.Canvas.CopyRect(R, Form.Canvas, R); end; Если нужно сохранить график из Chart’а У Chart’а есть Canvas, но он не совместим со стандартным. Для преодоления этой трудности мне известно два метода: 1) Сохраняем картинку из Chart’а в bmp-формате, затем грузим ее в Bitmap, а файл стираем. procedure ChartToBitmap1(Chart: TChart; var Bmp: TBitmap); begin Chart.SaveToBitmapFile('temp.bmp'); Bmp := TBitmap.Create; Bmp.LoadFromFile('temp.bmp'); DeleteFile('temp.bmp'); end; 2) Перекидываем картинку через буфер //Должен быть подключен модуль Clipbrd procedure ChartToBitmap2(Chart: TChart; var Bmp: TBitmap); begin Chart.CopyToClipboardBitmap; Bmp := TBitmap.Create; Bmp.Assign(Clipboard); end; Как сохранить TBitmap в gif-форматеДля этого делайте следующее: 1) Скачивайте модуль для работы с gif-форматом http://www.tolderlund.eu/delphi/gifimaged2010b.zip (200Кб) 2) Добавляйте файл GIFImage.pas в ваш проект и подключайте модуль GIFImage в разделе uses. 3) Дальше действуем так: procedure SaveBitmapToGif(Bmp: TBitmap; FileName: string); var Gif: TGIFImage; begin //Создаем объект TGIFImage Gif := TGIFImage.Create; //Передаем туда картинку из Bitmap'а Gif.Assign(Bmp); //Удаляем лишние цвета из палитры Gif.OptimizeColorMap; //* Ура! *// //Сохраняем картинку в gif формате Gif.SaveToFile(FileName); Gif.Free; end; Если в вашей картинке используется меньше 256 цветов, то вызов Gif.OptimizeColorMap; позволяем уменьшает размер палитры до реального количества цветов. Это позволяет сэкономить несколько сотен байт. Вы, возможно, привыкли к картинкам по мегабайту, где такая экономия кажется микроскопической? Отвыкайте. Теперь ваши графики будут такими, что это станет заметной экономией. PS. За последними версиями модуля для работы с Gif заходите на сайт разработчика: http://www.tolderlund.eu/delphi/
|