C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Отображение TJpegImage ДО и ПОСЛЕ сжатия, Помогите плз разобраться
Gallows
Отправлено: 05.03.2007, 13:29


Ученик-кочегар

Группа: Участник
Сообщений: 4



Хочу сделать отображение jpg картинки до, и после сжатия.
Код следующий:

// На TrackBar OnChange вешаю

TJPEGImage *jpeg = new TJPEGImage();
jpeg->Assign(saveBitmap); // Изображение получаю от TBitmap
jpeg->CompressionQuality = TrackBar1->Position;
jpeg->Compress();
jpeg->SaveToFile("xxx.jpg");

// В итоге имею то что и должно быть xxx.jpg в указанном качестве.
// Далее вывожу на экран
Image1->Picture->LoadFromFile("xxx.jpg");

И показываю .... Все ОК. НО, мне такая схема не нравится.
НИКАК не получилось не сохраняя в ФАЙЛ получить в Image1 картинку ПОСЛЕ сжатия. Всегда она была высоком качестве.

Подскажите плз, как избавить от этой КРИВОЙ схемы !
veb
Отправлено: 10.03.2007, 10:44


Ученик-кочегар

Группа: Участник
Сообщений: 5



Если не нравится диск юзать, то первое, что приходит на ум — сохранять в TMemoryStream а потом грузить оттуда. Кода меньше не станет, но диск останется в покое.
CODE

TMemoryStream* stream = new TMemoryStream();
jpeg->SaveToStream(stream);
Image1->Picture->Graphic->LoadFromStream(stream);


Отредактировано veb — 10.03.2007, 11:42
Admin
Отправлено: 10.03.2007, 18:03


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE (veb @ 10.03.2007, 10:44)
Если не нравится диск юзать, то первое, что приходит на ум — сохранять в TMemoryStream а потом грузить оттуда. Кода меньше не станет, но диск останется в покое.
CODE

TMemoryStream* stream = new TMemoryStream();
jpeg->SaveToStream(stream);
Image1->Picture->Graphic->LoadFromStream(stream);

А вы пробовали ? Плиз, рабочий пример в студию через
TMemoryStream.
GoodWin
Отправлено: 10.03.2007, 18:30


Дежурный стрелочник

Группа: Участник
Сообщений: 50



не знаю сработает или нет
времени нет проверить. домой хочется )

Image1->Picture->Assign( jpeg )

Вроде должен нормально принять
Admin
Отправлено: 11.03.2007, 00:54


Владимир

Группа: Администратор
Сообщений: 1190



А я пробовал — и у меня этот номер не прошел, поэтому
получиться — приведите код.
GoodWin
Отправлено: 12.03.2007, 10:35


Дежурный стрелочник

Группа: Участник
Сообщений: 50



---

Отредактировано GoodWin — 12.03.2007, 10:37
Admin
Отправлено: 14.03.2007, 22:39


Владимир

Группа: Администратор
Сообщений: 1190



Вы не поверите — но ответ нашел.

CODE
TMemoryStream *stream = new TMemoryStream;
jpeg->SaveToStream(stream);
stream->Position = 0;
jpeg->LoadFromStream(stream);


Дело в ОБЯЗАТЕЛЬНОЙ строчке:
stream->Position = 0;

Вернуться в Вопросы программирования в C++Builder