powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / JPEGImage
13 сообщений из 13, страница 1 из 1
JPEGImage
    #33285117
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет !

Проблема такова.

BCB 5, класс TJPEGImage. При попытке записи в файл выдается JPEG error #34. Поискал в инете, люди сталкивались, но решения не нашел. Видел рекомендации не использовать этот класс для работы с большими картинками. Так же рекомендуют использовать сторонние библиотеки, например, от интела, но она платная. Нашел бесплатную, от puntoexe, но скомпилить что-нибудь даже самое простенькое не удается, ей VC++ надо :)). Править библиотеку - легче удавиться.

Кто-нибудь еще сталкивался с задачами записи JPG-картинок ? Какие библиотеки есть для бильдера (дельфи) ?

PS: если ничего найти не удастся, придется самому писать , ну или глубоко ковырять исходники TJPEGImage .....
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
JPEGImage
    #33285519
dr_Nemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V Delphi mne thasto prihodilosj dobovljatj modulj 'jpeg' c nim vsjo rabotalo normaljno.
...
Рейтинг: 0 / 0
JPEGImage
    #33285831
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код, которым работаете с JPEG, не покажете? Обычно причина все-таки в нем, а не в классе.
...
Рейтинг: 0 / 0
JPEGImage
    #33285946
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код показать могу, но проблема не в коде, точно, я уже написал, точно такую же проблему встречали люди и раньше.

Поэкспериментировав, выяснил, точнее, с большой долей вероятности предположил, что борландовский jpeg не может сохранить файл больше мегабайта.

Код: plaintext
1.
2.
3.
4.
  JPG_Save->Assign(B_Load);
  JPG_Save->CompressionQuality=TrackBar1->Position;
  JPG_Save->Compress();
  JPG_Save->SaveToFile(fn);

B_Load - это Graphics::TBitmap *B_Load;

кстати, можно и без JPG_Save->Compress(); потому как, получив вышеназванную ошибку, отладчиком исходил все, выяснил, что Compress вызывается в SaveToFile, если не был вызван ранее.

PS: в дельфийном форуме проскочила ссылка на FreeImage библиотеку, скачал, щас разбираюсь, сижу
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
JPEGImage
    #33285964
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка вылетает в методе Compress
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
JPEGImage
    #33285999
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это откатало без проблем (Image1 грузился с файла CIMG.BMP в 14500кб, сохранялся в файл 123.JPG 2553кб. Щас в билдере попробую.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 procedure  TForm1.FormCreate(Sender: TObject);
 begin 
Image1.Picture.LoadFromFile('cimg.bmp');
 end ;

 procedure  TForm1.Button1Click(Sender: TObject);
 var 
  my_jpeg : TJPEGImage;
 begin 
  my_jpeg := TJPEGImage.Create;
   try 
    my_jpeg.Assign(Image1.Picture.Graphic);
    my_jpeg.CompressionQuality :=  100 ;
    my_jpeg.Compress;
    my_jpeg.SaveToFile('123.jpg');
   finally 
    ;
   end ;
 end ;
...
Рейтинг: 0 / 0
JPEGImage
    #33286034
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а это действительно выкинуло JPEG Error #36 (Билдер 5)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
        {
        Image1->Picture->LoadFromFile("CIMG.BMP");
        }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
        {
        TJPEGImage * my_jpeg = new TJPEGImage;
        my_jpeg->Assign(Image1->Picture->Graphic);
        my_jpeg->CompressionQuality =  98 ;
        my_jpeg->Compress();
        my_jpeg->SaveToFile("123.JPG");
        my_jpeg->Free();
        }
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
JPEGImage
    #33286036
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, на delphikingdom видел вопрос/ответ именно на тему ошибки #36, там было написано, что такая проблема есть, когда сохраняемая картинка от 1 до 2 Мб, попробуй сохранить так, чтобы было меньше 2 Мб
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
JPEGImage
    #33286048
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже надо сказать большое спасибо борману, я попробовал искусственно увеличить картинку, в 2 раза по обоим измерениям, в итоге файл сохранился без ошибок, его размер 4.7 Мб

Вобщем, проблема есть от 1 до 2 Мб
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
JPEGImage
    #33286078
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.б.. лажу скажу, но CompressionQuality и без вызова Compress отрабатывает сжатие, но, насколько я понимаю. только при сохранении. Метод Compress применяется для сжатия JPEGa, который обрабатывается в памяти. Повторюсь, уверенности у меня нет.
...
Рейтинг: 0 / 0
JPEGImage
    #33286083
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, перефразирую вопрос: как избежать ошибки 36 при сохранении jpeg-картинки в файл размером от 1 до 2 Мб ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
JPEGImage
    #33286129
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) В Дельфи7 эспериментировал:
- 14мб bmp -> 0.1, 0.5, 1.2, 1.3, 1.8, 2.5mb jpg
- 1.8mb jpg -> 1.8, 1.5, 1.3mb jpg
Проблем нет.
2) В Билдере5 проверил - действительно, метод Compress вызывает ошибку при размере от 1 до 2мб.

Отсюда варианты:
а) а зачем, собственно, использовать Compress? Он все равно корректно отрабатывается при сохранении в файл после задания CompressionQuality. Если нужно потом загрузить именно сжатую и с потерей качества картинку - то LoadFromFile.
а) работать через Дельфи-библиотеку.
...
Рейтинг: 0 / 0
JPEGImage
    #33286190
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rrrrrrrrrr
Код: plaintext
1.
2.
3.
4.
  JPG_Save->Assign(B_Load);
  JPG_Save->CompressionQuality=TrackBar1->Position;
//  JPG_Save->Compress();
  JPG_Save->SaveToFile(fn);
тоже не сохраняет, я ж говорю, SaveToFile вызывает Compress.

Если CompressionQuality поставить 96%, то файл получанеся примерно 900к - сохраняет нормально.

Вобщем, исходников TJPEGImage я не нашел, придется видимо ковырять FreeImage
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / JPEGImage
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]