![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменить размер картинки
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
Желаю успехов
ЗЫ: Может кто и до меня ответил