Изменить размер PNG изображения - PullRequest
5 голосов
/ 13 марта 2010

HI! Не могли бы вы сказать мне, как изменить размер изображения .png. Или лучше приведи пример. Я долго искал ответ, и кажется, что никто не знает, как изменить размер изображения .png и сохранить его прозрачность. (

Ответы [ 4 ]

22 голосов
/ 13 марта 2010

У первоначального автора компонента PNGImage (основа нативного компонента Delphi) был форум, на котором он и другие опубликовали фрагменты кода о том, как делать вещи с использованием компонента PNGImage.

Перед тем, как форум был закрыт, я взял копию всех фрагментов кода и разместил их на веб-сайте CodeGear Code Central.

Большинство, если не все, работают с собственными изображениями PNG и поддерживают альфа-канал.

Вот полный список примеров, включенных в пакет:

  • Плавное вращение объекта PNG
  • Изменение размера объекта TPNGO с использованием гладкого алгоритма
  • Нарезать один PNG на несколько меньших
  • Сохраняет изображение в виде растрового изображения или PNG.
  • Пример потомка чанка
  • Считать все tEXt-чанки и записать значения в объект TStrings
  • Отображение окна сообщения с информацией, извлеченной из файла PNG
  • Находит и вырезает блок из PNG-изображения
  • Этот метод преобразует png в объект jpeg
  • Этот метод преобразует png в объект bmp
  • Наложение одного PNG поверх другого
  • Это делает изображение наполовину прозрачным
  • Перевернуть png изображение по вертикали и сохранить обратно
  • Рисует изображение в формате png на рабочем столе.

Вот ссылка: CodeCentral PNG Методы

2 голосов
/ 13 марта 2010

Вы можете использовать Windows Imaging Component (WIC) в Delphi 2010. Вы можете загрузить свое изображение PNG в класс TWICImage , а затем извлечь интерфейс IWICBitmapScaler из его дескриптора.

Используя IWICBitmapScaler , вы можете уменьшить или увеличить изображение.

WIC доступен в Windows Vista и Windows 7. Для Windows XP необходимо установить обновление перед его использованием.

1 голос
/ 16 мая 2013

Существуют версии PngImage (Portable Network Graphics Delphi) Это позволяет сделать это с помощью простого StretchDraw.

У меня есть версия, которая позволяет это делать - 1.564 (31 июля 2006 г.)

И версия, которая не позволяет - 1.4361 (8 марта 2003 г.)

Для этого я использовал:

heart.png - с прозрачностью, и мне удалось изменить ее размер и сохранить с прозрачностью.

empty.png - чистый прозрачный png. это использовалось как чистый лист, чтобы поместить мое изображение на этом.

Я проверил это с помощью такого кода:

procedure TForm1.Button1Click(Sender: TObject);
var pic_empty, pic_stamp, pic_result :TPicture;
   r:TRect;
   png : TPNGObject;
begin

  pic_stamp := TPicture.Create;
  pic_stamp.LoadFromFile('c:\heart.png');
  pic_stamp.Graphic.Transparent := True;

  pic_empty := TPicture.Create;
  pic_empty.LoadFromFile('c:\empty.png');
  pic_empty.Graphic.Transparent := True;

  r.Left := 0;
  r.Top := 0;
  r.Right := r.Left + 100;
  r.Bottom := r.Top + 100;

  pic_result := tpicture.Create;
  pic_result.Bitmap.Assign(pic_empty.Graphic);
  pic_result.Graphic.Transparent := True;
  pic_result.Bitmap.Canvas.StretchDraw(r,pic_stamp.Graphic);
  pic_result.Bitmap.Width :=100;
  pic_result.Bitmap.Height:=100;

  png := TPNGObject.Create;
  png.Assign(pic_result.Bitmap);
  png.SaveToFile('c:\result.png');

  png.Free;
  pic_result.Free;
  pic_empty.Free;
  pic_stamp.free;

end;

Delphi-7, win7 x64

0 голосов
/ 13 марта 2010

Должен признаться, что у меня нет опыта программной игры с png.
В любом случае, вы найдете несколько библиотек здесь . Кроме встроенной поддержки Delphi PNG, я думаю, вы найдете там все существующие библиотеки (конечно же, родные для Delphi).

Если вам ничего не помогает, подумайте, если возможно, поиграйте с ImageMagick ... Это швейцарский армейский нож для манипулирования изображениями, и все, что он может сделать, выполнимо в командной строке

...