Форум: "Media";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизИзменить размер картинки Найти похожие ветки
← →
FiLimon © (2003-10-24 23:31) [0]Вопрос такой.
Нужно загрузить jpg или gif.
Затем изменить его высоту и ширину в пикселях
и сохранить на диск.
Заранее благодарен.
← →
Rouse_ © (2003-10-25 00:48) [1]Без отображения на TBitMap не получится. Вообщето любой формат, будь то Jpg или ICO в конечном представлении является битовой маской на канвасе.
А по сабжу StretchBlt
Желаю успехов
ЗЫ: Может кто и до меня ответил
← →
FiLimon © (2003-10-25 10:25) [2]Спасибо конечно, но мне это отображать не надо. Мне надо только изменить размер и сохранить с новыми параметрами. Кстати, что такое StretchBlt?
← →
andre © (2003-10-26 17:20) [3]
> Кстати, что такое StretchBlt?
Это WinApi функция, которая масштабирует изображение.
← →
Mihey © (2003-10-26 21:07) [4]>А по сабжу StretchBlt
Ё-моё, 2003 год, Pentuim"ы V, StretchBlt... Я плакалъ.
← →
Asteroid © (2003-10-26 22:06) [5]> Mihey © (26.10.03 21:07) [4]
А есть другие предложения? Писать собственную ф-цию растяжения с использованием SSE2?
← →
andre © (2003-10-26 22:31) [6]А чем WinApi не устраивает? Всего пара строк, и вуаля (только про пропорции не надо забывать)и всё делается в памяти безо всякого отображения.
← →
Mihey © (2003-10-26 22:38) [7]2 Ребята:
МНЕ, пользователю, нужно качество, а не простота ВАШЕЙ, программерской, работы.
← →
FiLimon © (2003-10-27 08:03) [8]Ниже мой код. Что хорошо, что нехорошо.
Может можно обойтись без 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.
← →
Depth (2003-10-28 14:16) [9]посмотри:
http://delphiclub.ru/forums/index.php?act=ST&f=4&t=362&s=418b3054c53bd1e223262d8f381e0b9e
← →
Als (2003-11-10 12:58) [10]FiLimon ©:
Изображение почему-то сильно теряет в качестве. Если уменьшать прямо на экране, все отлично (кроме расхода памяти), если перегонять через файл - размывается.
← →
FiLimon © (2003-11-16 09:38) [11]там надо добавить FJpeg.Performance:=jpBestQuality; и с качеством все будет в порядке.
← →
Галина (2004-01-22 09:03) [12]А как просто изменить размер изображения с отображением в форме. Кто-нибудь поделитесь опытом...
← →
Mantic0re (2004-01-22 11:01) [13]2 Галина:
Смотри выше (StretchBlt)..
2 Asteroid:
можно на SSE, но для сплайнов,
лучше ММХ для билинейной интерполяции
2 Mihey:
>Ё-моё, 2003 год, Pentuim"ы V, StretchBlt... Я плакалъ.
А плакать не надо, надо объяснять людям..
← →
Mantic0re (2004-01-22 11:04) [14]Собсно по сабжу - тебе нужно загружать
изображение в память, изменять размер, а затем сохранять..
Возможностей у тебя не много:
* либо писать всё самому (что я делал в этом случае)
* либо использовать библиотеки сторонних разработчиков
(если JPEG.DCU не позволяет это делать)
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c