Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменить размер картинки


FiLimon ©   (2003-10-24 23:31:00) 

Вопрос такой.
Нужно загрузить jpg или gif.
Затем изменить его высоту и ширину в пикселях
и сохранить на диск.

Заранее благодарен.


Mantic0re   (2004-01-22 11:04:00) [1]

Собсно по сабжу - тебе нужно загружать
изображение в память, изменять размер, а затем сохранять..

Возможностей у тебя не много:
* либо писать всё самому (что я делал в этом случае)
* либо использовать библиотеки сторонних разработчиков
(если JPEG.DCU не позволяет это делать)


Mantic0re   (2004-01-22 11:01:00) [2]

2 Галина:

  Смотри выше (StretchBlt)..

2 Asteroid:
 
  можно на SSE, но для сплайнов,
  лучше ММХ для билинейной интерполяции

2 Mihey:
 
>Ё-моё, 2003 год, Pentuim'ы V, StretchBlt... Я плакалъ.
  А плакать не надо, надо объяснять людям..


Галина   (2004-01-22 09:03:00) [3]

А как просто изменить размер изображения с отображением в форме. Кто-нибудь поделитесь опытом...


FiLimon   (2003-11-16 09:38:00) [4]

там надо добавить FJpeg.Performance:=jpBestQuality; и с качеством все будет в порядке.


Als   (2003-11-10 12:58:00) [5]

FiLimon ©:

Изображение почему-то сильно теряет в качестве. Если уменьшать прямо на экране, все отлично (кроме расхода памяти), если перегонять через файл - размывается.


Depth   (2003-10-28 14:16:00) [6]

посмотри:

http://delphiclub.ru/forums/index.php?act=ST&f=4&t=362&s=418b3054c53bd1e223262d8f381e0b9e


FiLimon   (2003-10-27 08:03:00) [7]

Ниже мой код. Что хорошо, что нехорошо.
Может можно обойтись без Canvas.StretchDraw?
Покажите как можно использовать StretchBlt


program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils,classes,graphics,Jpeg;

var
   FJpeg    : TJpegImage;
   FBmp     : TBitmap;
   JpegFile1, JpegFile2 : AnsiString;
   StreamJpg  : TStream;
begin

 JpegFile1:='1.jpg';
 JpegFile2:='2.jpg';

if FileExists(JpegFile1) then
begin
 FJpeg := TJpegImage.Create;
 FBmp  := TBitmap.Create;

 StreamJpg := TFileStream.Create(JpegFile1, fmOpenRead);
 try
   if FJpeg.PixelFormat = jf24bit then
     FBmp.PixelFormat := pf24bit
   else
     FBmp.PixelFormat := pf8bit;

   FJpeg.LoadFromStream(StreamJpg);

   FBmp.Width := 700;
   FBmp.Height := 700;
   FBmp.Canvas.CopyMode:=cmSrcCopy;
   FBmp.Canvas.StretchDraw(Rect,0,0,FBmp.Width,FBmp.Height),FJpeg);
 finally
   StreamJpg.Free;
 end;

 if FileExists(JpegFile2) then DeleteFile(JpegFile2);
 StreamJpg := TFileStream.Create(JpegFile2,fmCreate);
 try
   if FBmp.PixelFormat = pf24bit then
     FJpeg.PixelFormat := jf24bit
   else
     FJpeg.PixelFormat := jf8bit;

   FJpeg.Assign(FBmp);
   FJpeg.SaveToStream(StreamJpg);

 finally
   StreamJpg.Free;
 end;
 FBmp.Free;
 FJpeg.Free;
end;
end.


Mihey   (2003-10-26 22:38:00) [8]

2 Ребята:

МНЕ, пользователю, нужно качество, а не простота ВАШЕЙ, программерской, работы.


andre   (2003-10-26 22:31:00) [9]

А чем WinApi не устраивает? Всего пара строк, и вуаля (только про пропорции не надо забывать)и всё делается в памяти безо всякого отображения.


Asteroid   (2003-10-26 22:06:00) [10]

> Mihey ©   (26.10.03 21:07) [4]
А есть другие предложения? Писать собственную ф-цию растяжения с использованием SSE2?


Mihey   (2003-10-26 21:07:00) [11]

> А по сабжу StretchBlt

Ё-моё, 2003 год, Pentuim'ы V, StretchBlt... Я плакалъ.


andre   (2003-10-26 17:20:00) [12]


> Кстати, что такое StretchBlt?

Это WinApi функция, которая масштабирует изображение.


FiLimon   (2003-10-25 10:25:00) [13]

Спасибо конечно, но мне это отображать не надо. Мне надо только изменить размер и сохранить с новыми параметрами. Кстати, что такое StretchBlt?


Rouse_   (2003-10-25 00:48:00) [14]

Без отображения на TBitMap не получится. Вообщето любой формат, будь то Jpg или ICO в конечном представлении является битовой маской на канвасе.
А по сабжу StretchBlt

Желаю успехов

ЗЫ: Может кто и до меня ответил


Наверх

Титульная страница Поиск, карта сайта Написать письмо