Главная страница
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.029 c
2-1132786540
Дева
2005-11-24 01:55
2005.12.18
CommaText


14-1132829263
Ермак
2005-11-24 13:47
2005.12.18
Паскаль и С++ - различные понимания свободы?


6-1125722250
sunsay
2005-09-03 08:37
2005.12.18
Ограничить кол-во входящих соединений


14-1133078119
ArtemESC
2005-11-27 10:55
2005.12.18
Обработчик прерываний


3-1130512604
Juice
2005-10-28 19:16
2005.12.18
Зачем нужны многозвенки ?