Форум: "Media";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизВыполнить Stretch jpg файла Найти похожие ветки
← →
nstur (2005-07-12 16:14) [0]У меня есть 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 изображения. Может библиотеки есть какието?
← →
A22 © (2005-07-12 16:25) [1]попробуй StretchDraw из VCL вместо StretchBlt из GDI
← →
nstur (2005-07-12 16:43) [2]StretchDraw Canvas или есть еще что-то? Я думал, что этот метод только для вывода изображения. Ни как в голову не приходит, каким местом его приспособить.
← →
nstur (2005-07-12 16:45) [3]Может я не пояснил. Полученное изображение я хочу сохранить в jpg файл.
← →
A22 © (2005-07-12 18:22) [4]нарисуй в канву битмапа 160х120, а потом
jpeg.Assign(bmp);
jpeg.SavetoFile();
← →
nstur (2005-07-13 09:04) [5]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;
← →
MBo © (2005-07-13 09:09) [6]перед StretchBlt сделай SetStretchBltMode
Лучше всего - с HALFTONE (но в Win9X не поддерживается)
← →
nstur (2005-07-13 09:17) [7]Спасибо, все получилось. Ниже на всякий случай привожу код.
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;
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c