![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как фиксировать значение размера потока TJPEGImage? [D7, WinXP]
Andrew © (2003-08-28 09:14:00)
Ниже приведен пример кода, в котором величина размера потока изменяется при каждом нажатии на кнопке 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;
Reindeer Moss Eater (2003-08-29 08:45:00) [1]
фото детей для медицинской карты.
Значит уже есть исходные фотодокументы в каком-то формате?
Почему бы не передавать их в этом формате?
Dimka Maslov (2003-08-28 19:06:00) [2]
У меня же сказано: не нужно писать
Image1.Picture.Bitmap.Assign(JPEGImage)
И вообще фотографии достаточно сохранить в жпег один раз, а потом только читать.
Andrew (2003-08-28 18:48:00) [3]
фото детей для медицинской карты.
Reindeer Moss Eater (2003-08-28 17:25:00) [4]
Я ж сказал, что JPEG был придуман не просто так, для сжатия рисунков вообще, а для сжатия рисунков имеющих характерные признаки. (фотоизображения).
Поэтому, если хочешь "в тему" - говори что за изображения у тебя.
Andrew (2003-08-28 17:16:00) [5]
Мне необходим динамический процесс через поток прямо в программе.
Я имел в виду - какой из файловых форматов более подходит к решаемой в этом обсуждении проблеме.
RAR - не в тему, извините.
Reindeer Moss Eater (2003-08-28 17:13:00) [6]
Алгоритм RAR
Andrew (2003-08-28 17:11:00) [7]
Какой Вы считаете лучший способ сжатия для изображений?
Reindeer Moss Eater (2003-08-28 16:55:00) [8]
Про что?
Andrew (2003-08-28 16:49:00) [9]
Пожалуйста, можно более конкретнее.
Reindeer Moss Eater (2003-08-28 16:33:00) [10]
JPEG считается самым лучшим по сжатию или я ошибаюсь.
Он ориентирован на изображения вполне определенного типа.
И имеет хорошее соотношение качество/степень сжатия для этих изображений.
Это не самый лучший способ сжатия изображений вообще.
Andrew (2003-08-28 16:25:00) [11]
Dimka Maslov
Спасибо за ответ!
А какой же тогда можно использовать тип графического файла, чтобы и сжимал максимально картинку и при восстановлении не было потери данных? Мне необходимо работать с картинкой через поток! Ведь формат JPEG считается самым лучшим по сжатию или я ошибаюсь.
Можно более детальнее и возможно со ссылкой на источник "этого файла", лучше чем JPEG.
Dimka Maslov (2003-08-28 15:48:00) [12]
Формат JPEG подразумевает потерю данных при сжатии. Следовательно, когда ты выполняешь Image1.Picture.Bitmap.Assign, отображается восстановленная из JPEG искажённая картинка. Когда ты в следующий раз нажимаешь на кнопку, JPEG начинает сжимать искажённую картинку, при этом размер сжатого потока уменьшается, и так далее, пока качество не станет отвратительным. Во избежание безобразия достаточно убрать лишнюю строку Image1.Picture.Bitmap.Assign(JPEGImage)
Andrew (2003-08-28 14:46:00) [13]
Пожалуйста Мастера, очень необходимо решение данной проблемы!
Андрей
Andrew (2003-08-28 09:46:00) [14]
Извините ошибся - в процедуре FormCreate следует читать Image1.Picture.Bitmap.LoadFromFile("sample.jpg");
Пожалуйста Мастера, очень необходимо решение данной проблемы!
Андрей