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

Вниз

Как фиксировать значение размера потока TJPEGImage?   Найти похожие ветки 

 
Andrew   (2003-08-28 09:14) [0]

Ниже приведен пример кода, в котором величина размера потока изменяется при каждом нажатии на кнопке Button1. Непонятно почему? Ведь JPEGImage манипулирует с одной и той же картинкой в Image1. Мастера, объясните почему это происходит и как не изменяя приведенной схемы кода (!) события Button1 сделать так (что-то добавить или несколько модифицировать код), чтобы Stream.Size оставался неизменным!

procedure TForm1.FormCreate(Sender: TObject);
............................................................
begin
............................................................
Image1.Picture.Bitmap.Assign("sample.jpg");
...................................................
end;

procedure TForm1.Button1Click(Sender: TObject);
var JPEGImage: TJPEGImage;
Stream: TMemoryStream;
begin
JPEGImage:= TJPEGImage.Create;
Stream:= TMemoryStream.Create;
try
JPEGImage.Assign(Image1.Picture.Bitmap);
JPEGImage.SaveToStream(Stream);

Stream.Position:= 0;
JPEGImage.LoadFromStream(Stream);
Image1.Picture.Bitmap.Assign(JPEGImage);
Label1.Caption:= Format("%d bytes", [Stream.Size]);
finally
Stream.Free;
JPEGImage.Free;
end;
end;


 
Andrew   (2003-08-28 09:46) [1]

Извините ошибся - в процедуре FormCreate следует читать Image1.Picture.Bitmap.LoadFromFile("sample.jpg");

Пожалуйста Мастера, очень необходимо решение данной проблемы!
Андрей


 
Andrew   (2003-08-28 14:46) [2]

Пожалуйста Мастера, очень необходимо решение данной проблемы!
Андрей


 
Dimka Maslov ©   (2003-08-28 15:48) [3]

Формат JPEG подразумевает потерю данных при сжатии. Следовательно, когда ты выполняешь Image1.Picture.Bitmap.Assign, отображается восстановленная из JPEG искажённая картинка. Когда ты в следующий раз нажимаешь на кнопку, JPEG начинает сжимать искажённую картинку, при этом размер сжатого потока уменьшается, и так далее, пока качество не станет отвратительным. Во избежание безобразия достаточно убрать лишнюю строку Image1.Picture.Bitmap.Assign(JPEGImage)


 
Andrew   (2003-08-28 16:25) [4]

Dimka Maslov

Спасибо за ответ!
А какой же тогда можно использовать тип графического файла, чтобы и сжимал максимально картинку и при восстановлении не было потери данных? Мне необходимо работать с картинкой через поток! Ведь формат JPEG считается самым лучшим по сжатию или я ошибаюсь.
Можно более детальнее и возможно со ссылкой на источник "этого файла", лучше чем JPEG.


 
Reindeer Moss Eater ©   (2003-08-28 16:33) [5]

JPEG считается самым лучшим по сжатию или я ошибаюсь.
Он ориентирован на изображения вполне определенного типа.
И имеет хорошее соотношение качество/степень сжатия для этих изображений.
Это не самый лучший способ сжатия изображений вообще.


 
Andrew   (2003-08-28 16:49) [6]

Пожалуйста, можно более конкретнее.


 
Reindeer Moss Eater ©   (2003-08-28 16:55) [7]

Про что?


 
Andrew   (2003-08-28 17:11) [8]

Какой Вы считаете лучший способ сжатия для изображений?


 
Reindeer Moss Eater ©   (2003-08-28 17:13) [9]

Алгоритм RAR


 
Andrew   (2003-08-28 17:16) [10]

Мне необходим динамический процесс через поток прямо в программе.
Я имел в виду - какой из файловых форматов более подходит к решаемой в этом обсуждении проблеме.
RAR - не в тему, извините.


 
Reindeer Moss Eater ©   (2003-08-28 17:25) [11]

Я ж сказал, что JPEG был придуман не просто так, для сжатия рисунков вообще, а для сжатия рисунков имеющих характерные признаки. (фотоизображения).
Поэтому, если хочешь "в тему" - говори что за изображения у тебя.


 
Andrew   (2003-08-28 18:48) [12]

фото детей для медицинской карты.


 
Dimka Maslov ©   (2003-08-28 19:06) [13]

У меня же сказано: не нужно писать
Image1.Picture.Bitmap.Assign(JPEGImage)

И вообще фотографии достаточно сохранить в жпег один раз, а потом только читать.


 
Reindeer Moss Eater ©   (2003-08-29 08:45) [14]

фото детей для медицинской карты.
Значит уже есть исходные фотодокументы в каком-то формате?
Почему бы не передавать их в этом формате?



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.022 c
14-99724
Думкин
2003-12-08 06:28
2003.12.30
С днем рождения! 8 декабря.


1-99531
DelphiNew
2003-12-16 14:25
2003.12.30
Проблема при вводе данных


3-99467
Vic
2003-12-05 11:38
2003.12.30
Обращение к значению Sum при работе с ADO


14-99733
Rihter
2003-12-07 23:26
2003.12.30
Чем отличается реляционная база от других?


1-99591
frost
2003-12-17 11:10
2003.12.30
Internal error SY576