Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Выполнить 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 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
4-1128592123
Windows1
2005-10-06 13:48
2005.12.18
фокус на кнопке+нажать ее Enter^ом


6-1125857565
kivadim
2005-09-04 22:12
2005.12.18
Отправка данных от ServerSocket к множеству ClientSocket


14-1132901183
Ega23
2005-11-25 09:46
2005.12.18
С днем рождения! 25 ноября


2-1133740879
HF-Trade
2005-12-05 03:01
2005.12.18
Прервать работу основной процедуры - из вызванной процедуры...


4-1129470232
Svin
2005-10-16 17:43
2005.12.18
ReadFile