Главная страница
    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.46 MB
Время: 0.012 c
4-1129626881
ShiFT
2005-10-18 13:14
2005.12.18
WinHotKeyCtrl


4-1125490472
Никита
2005-08-31 16:14
2005.12.18
Запись CD


6-1125938209
Galiaf
2005-09-05 20:36
2005.12.18
Закачка сокетам.


14-1132667294
Opilki_Inside
2005-11-22 16:48
2005.12.18
Алгоритм получение уникального номера железа


2-1133250535
dolmat
2005-11-29 10:48
2005.12.18
Создание и использование DLL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский