С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/47: Рейтинг темы: голосов - 47, средняя оценка - 4.98
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
1

Преобразовать JPG или PNG в BMP

22.06.2015, 18:02. Показов 9573. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if(clk == "jpg" || clk == "JPG" || clk == "JPEG" || clk == "jpeg")
{
  try
  {
    jpg->LoadFromStream(s);
    //jpg->Compress();
    Infile->Picture->Bitmap->Assign(jpg);
  }
  __finally
  {
  }
}
if(clk == "PNG" || clk == "png")
{
  try
  {
    png->LoadFromStream(s);
    Infile->Picture->Bitmap->Assign(png);
  }
  __finally
  {
  }
}
Получаю ошибку(см. скриншот)

TMemoryStream *s = new TMemoryStream;
TImage *Infile = new TImage(NULL);
TJPEGImage *jpg = new TJPEGImage();
TPNGObject* png = new TPNGObject();

Вопрос : что я делаю не так?
Миниатюры
Преобразовать JPG или PNG в BMP  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2015, 18:02
Ответы с готовыми решениями:

Вращение TImage c PNG. Нужна переделка решения для BMP под PNG
Здравствуйте. Очень нужна помощь с вращением. Есть решение данной проблемы для формата bmp :...

Как преобразовать рисунок из "png" в "bmp" или в "jpg"?
Есть программка, которая ставит обои рабочего стола на выбор пользователя, она может поставить...

ListView загрузка изображения (jpg, png, bmp)
Всем привет! Всех с праздником! Есть код: FMX procedure TForm1.Button1Click(Sender:...

Как сделать программно из BMP (JPG, PNG) - ICO
Как сделать из bmp - ico? Все мы знаем что есть функция Save у объекта Bitmap. Что я не...

15
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.06.2015, 18:45 2
Цитата Сообщение от Gdasar Посмотреть сообщение
Вопрос : что я делаю не так?
Почитайте про блоки try/__finally а также try/catch и зачем это вообще нужно.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
22.06.2015, 19:48  [ТС] 3
Цитата Сообщение от Avazart Посмотреть сообщение
Почитайте про блоки try/__finally а также try/catch и зачем это вообще нужно.
Окей.

Сформулирую вопрос иначе :
Как сделать преобразование картинки из одного формата в другой, чтобы при этом не появлялась данная ошибка?
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.06.2015, 21:04 4
Как запихнуть JPG в Bitmap
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
22.06.2015, 23:47  [ТС] 5
Avazart, я что-то не пойму!
C++
1
2
jpg->LoadFromStream(s);
Infile->Picture->Bitmap->Assign(jpg);
Это не одно и тоже?

Не по теме:

jpg->LoadFromStream(s);
bmp->Assign(jpg);
jpg->Assign(bmp);
Infile->Picture->Bitmap = bmp;

0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
23.06.2015, 23:50  [ТС] 6
Сделал костыль:
C++
1
2
3
s->SaveToFile(ExtractFileDir(Application->ExeName) + "\\image\\" + Key + "." + clk);
jpg->LoadFromFile(ExtractFileDir(Application->ExeName) + "\\image\\" + Key + "." + clk);
Infile->Picture->Bitmap->Assign(jpg);
Судя по всему ошибка была(и осталась) в этой строке:
C++
1
jpg->LoadFromStream(s);
Как ее исправить я не знаю.
P.S. Если у Вас есть мысли по этому поводу, то поделитесь.


Кроме того появилась другая ошибка : некорректность загружаемого файла(файл 12).

C++
1
2
3
s->SaveToFile(ExtractFileDir(Application->ExeName) + "\\image\\" + Key + "." + clk);
png->LoadFromFile(ExtractFileDir(Application->ExeName) + "\\image\\" + Key + "." + clk); // ошибка
Infile->Picture->Bitmap->Assign(png);
Если загрузить файл(см.аттач архив 3.zip), то появляется ошибка. даже при загрузке на форум была ошибка(файл err)
Помогите решить проблему.
Сам пытался:
C++
1
2
3
4
5
6
7
8
9
10
TImage *im3 = new TImage(NULL);
TImage *im4 = new TImage(NULL);
TBitmap *bmp1 = new TBitmap();
TBitmap *bmp2 = new TBitmap();
im3->Picture->LoadFromFile(ExtractFileDir(Application->ExeName) + "\\file\\1.jpg");
im4->Picture->LoadFromFile(ExtractFileDir(Application->ExeName) + "\\file\\2.png");
bmp1->Assign(im3->Picture->Bitmap);
bmp2->Assign(im4->Picture->Bitmap);
bmp1->SaveToFile(ExtractFileDir(Application->ExeName) + "\\file\\20.bmp");
bmp2->SaveToFile(ExtractFileDir(Application->ExeName) + "\\file\\30.bmp");
Но безуспешно. Файлы 20 и 30 пустые.

Заранее спасибо.
Миниатюры
Преобразовать JPG или PNG в BMP   Преобразовать JPG или PNG в BMP  
Вложения
Тип файла: zip 3.zip (33.2 Кб, 11 просмотров)
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2015, 00:41 7
Вы точно нормальные файлы скармливаете? Смотрите на вами залитю вторую картинку - расширение не соответствует истинному формату - откройте изображение в текстовом/hex - редакторе и обратите на первые символы в нем.

Есть вроде ExtractFilleExt() для изьятия расширения.
1
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
24.06.2015, 08:52 8
Лучший ответ Сообщение было отмечено Gdasar как решение

Решение

Цитата Сообщение от Gdasar Посмотреть сообщение
Сам пытался:
Чтобы этот фрагмент заработал, я переделал его след. образом__
C++
1
2
3
4
5
6
7
8
9
10
11
//   TImage *im3 = new TImage(NULL);
//   TImage *im4 = new TImage(NULL);
   TJPEGImage *im3 = new TJPEGImage();
   Graphics::TBitmap *bmp1 = new Graphics::TBitmap();
//   TBitmap *bmp2 = new TBitmap();
   im3->LoadFromFile(".\\3.jpg");
//   im4->Picture->LoadFromFile(ExtractFileDir(Application->ExeName) + "\\file\\2.png");
   bmp1->Assign(im3);
//   bmp2->Assign(im4->Picture->Bitmap);
   bmp1->SaveToFile(".\\20.bmp");
//   bmp2->SaveToFile(ExtractFileDir(Application->ExeName) + "\\file\\30.bmp");
Кстати, в вашем вложении не "3.png", а файл jpg с уровнем сжатия 83%, по мнению IrfanView...

Добавлено через 10 минут
а для загрузки с потока (из ресурсов приложения) - вот пример__
C++
1
2
3
4
5
6
   TResourceStream *rss = new TResourceStream(0,"PICT2","JPEG");
   TJPEGImage *jp = new TJPEGImage();
   Graphics::TBitmap *bmp1 = new Graphics::TBitmap();
   jp->LoadFromStream(rss);
   bmp1->Assign(jp);
   bmp1->SaveToFile(".\\21.bmp");
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
24.06.2015, 17:22  [ТС] 9
Avazart, попробовал я ExtractFilleExt() - показывает, что файл имеет тип png
C++
1
2
3
4
5
if(OpenDialog1->Execute())
{
    AnsiString FileName = OpenDialog1->FileName;
    ShowMessage(ExtractFileExt(FileName));
}
nick42, данный код подходит лишь в том случае, если мы знаем тип файла? Ведь так?
А как программно узнать тип файла? Чтобы избежать таких ошибок.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2015, 17:26 10
Цитата Сообщение от Gdasar Посмотреть сообщение
Avazart, попробовал я ExtractFilleExt() - показывает, что файл имеет тип png
Не тип а расширение, еу? Судя по всему вы не понимаете что такое расщширение файла и его реальный тип/формат
Цитата Сообщение от Gdasar Посмотреть сообщение
А как программно узнать тип файла? Чтобы избежать таких ошибок.
Цитата Сообщение от Avazart Посмотреть сообщение
откройте изображение в текстовом/hex - редакторе и обратите внимание на первые символы в нем.
А можно на.... посылать тек кто посовывает файлы с неправильным расширением.
0
Практикантроп
4840 / 2725 / 533
Регистрация: 23.09.2011
Сообщений: 5,795
24.06.2015, 17:27 11
Лучший ответ Сообщение было отмечено Gdasar как решение

Решение

Цитата Сообщение от Gdasar Посмотреть сообщение
А как программно узнать тип файла?
Думаю, надо считать в буфер начальный блок файла и проанализировать его, вооружившись описаниями стандартов. Потому что более точную информацию взять неоткуда, - расширение может поменять любой мало-мальски грамотный октябрёнок.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
24.06.2015, 17:28  [ТС] 12
Avazart, ну а как получить тип? Как докопаться до истины?
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2015, 17:30 13
Цитата Сообщение от Gdasar Посмотреть сообщение
Avazart, ну а как получить тип? Как докопаться до истины?
Сходить в школу и научится читать для начала.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
24.06.2015, 17:32  [ТС] 14
В hex:
Код
BM6h - bmp
JFIF - jpg
PNG - png
Добавлено через 1 минуту

Не по теме:

Avazart, спасибо! Вы "очень" сильно помогли!

0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2015, 17:33 15
Цитата Сообщение от nick42 Посмотреть сообщение
Думаю, надо считать в буфер начальный блок файла и проанализировать его, вооружившись описаниями стандартов. Потому что более точную информацию взять неоткуда, - расширение может поменять любой мало-мальски грамотный октябрёнок.
Или тупо пытаться открыть всеми возможными способами по очереди скрывая ошибки в блоке catch() такой себе ленивый способ.
Естественно изначально ориентироваться на расширения, а если нет - попытки открыть как оставщиеся форматы.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
24.06.2015, 18:05  [ТС] 16
Ну,как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TStringList *L = new TStringList();
if(OpenDialog1->Execute())
{
    Memo1->Lines->Clear();
    AnsiString FileName = OpenDialog1->FileName;
    L->LoadFromFile(FileName);
    if(L->Text.Pos("PNG") != 0)
        Memo1->Lines->Add("PNG");
    if(L->Text.Pos("BM") != 0)
        Memo1->Lines->Add("BMP");
    if(L->Text.Pos("яШяа") != 0)
        Memo1->Lines->Add("JPG");
    Memo1->Lines->Add(L->Text);
}
delete L;
0
24.06.2015, 18:05
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2015, 18:05
Помогаю со студенческими работами здесь

Сохранение изображения в различных форматах (jpg, png, bmp)
Здравствуйте! Имеется объект класса Image. Как мне выбрать формат сохранения изображения (jpg, bmp,...

Сохранение изображений в формате png, gif, jpg, bmp
Сохраняя изображение из PictureBox в файл мы получаем несжатый битовый образ независимо от того...

Преобразовать bmp в png и обратно
Добрый день, форумчане! Для одной программы мне понадобилась такая функция для преобразовния bmp в...

Как вывести в окно картинку jpg, png и др. (кроме .bmp) и звук, кроме WAV
Заранее спасибо за рабочий пример!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru