Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1133257072
Alek
2005-11-29 12:37
2005.12.18
вопрос по FireBird


14-1132916818
Не молодой
2005-11-25 14:06
2005.12.18
Атака порта


14-1133098896
Alexis
2005-11-27 16:41
2005.12.18
На borland.com только Delphi 2005 .NET?


2-1133445304
oleggar
2005-12-01 16:55
2005.12.18
word8


14-1132506308
Pazitron_Brain
2005-11-20 20:05
2005.12.18
Нужно поговорить с врачом.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский