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;
|
|