![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполнить Stretch jpg файла [D6, Win2k]
nstur © (2005-07-12 16:14:00)У меня есть jpg файл, который необходито уменьшить до 160х120.
Загружаю в TImage, файл и пытаюсь выполнить:
StretchBlt(Image2.Canvas.Handle, 0, 0, 160, 120,
Image1.Canvas.Handle, 0, 0, w, h, SRCCOPY);
работает только с bmp файлами, а мне нужен jpg.
Разбираясь обнаружил, что Image1.Picture.Bitmap{.Canvas.Handle} пуст.
Подскажите как можно выполнить Stretch изображения. Может библиотеки есть какието?
nstur (2005-07-13 09:17:00) [1]Спасибо, все получилось. Ниже на всякий случай привожу код.
var
w, h: integer;
Scr, Dest: TBitmap;
j: TJPEGImage;
begin
Scr:= TBitmap.Create;
Dest:= TBitmap.Create;
j:= TJPEGImage.Create;
try
Scr.Assign(Image1.Picture.Graphic);
Dest.Assign(Scr);
Dest.Width:= 160; Dest.Height:= 120;
SetStretchBltMode(Dest.Canvas.Handle, HALFTONE);
StretchBlt(Dest.Canvas.Handle, 0, 0, Dest.Width, Dest.Height,
Scr.Canvas.Handle, 0, 0, Scr.Width, Scr.Height, SRCCOPY);
j.Assign(Dest);
j.SaveToFile('c:\1.jpg');
Image2.Picture.Bitmap.Assign(Dest);//показать, что получилось
finally
Scr.Free;
Dest.Free;
j.Free;
end;
end;
MBo (2005-07-13 09:09:00) [2]перед StretchBlt сделай SetStretchBltMode
Лучше всего - с HALFTONE (но в Win9X не поддерживается)
nstur (2005-07-13 09:04:00) [3]A22 спасибо за инфу. Ниже приведен код, который позволяет выполнить Stretch загруженного в Image1 jpg файла. Но выходная картинки получается с искаженнымицветами. С bmp, которые я загружал в Image1 все нормально.
Что можно/нужно сделать для получения нормального изображения.
var
Scr, Dest: TBitmap;
j: TJPEGImage;
begin
Scr:= TBitmap.Create;
Dest:= TBitmap.Create;
j:= TJPEGImage.Create;
try
Scr.Assign(Image1.Picture.Graphic);
Dest.Width:= 160; Dest.Height:= 120;
Dest.PixelFormat:= Scr.PixelFormat;
StretchBlt(Dest.Canvas.Handle, 0, 0, Dest.Width, Dest.Height,
Scr.Canvas.Handle, 0, 0, Scr.Width, Scr.Height, SRCCOPY);
j.Assign(Dest);
j.SaveToFile('c:\1.jpg');
finally
Scr.Free;
Dest.Free;
j.Free;
end;
end;
A22 (2005-07-12 18:22:00) [4]нарисуй в канву битмапа 160х120, а потом
jpeg.Assign(bmp);
jpeg.SavetoFile();
nstur (2005-07-12 16:45:00) [5]Может я не пояснил. Полученное изображение я хочу сохранить в jpg файл.
nstur (2005-07-12 16:43:00) [6]StretchDraw Canvas или есть еще что-то? Я думал, что этот метод только для вывода изображения. Ни как в голову не приходит, каким местом его приспособить.
A22 (2005-07-12 16:25:00) [7]попробуй StretchDraw из VCL вместо StretchBlt из GDI