Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 11.10.2010
Сообщений: 35
1

Преобразование BMP в EMF

11.01.2012, 18:43. Просмотров 1343. Ответов 10
Метки нет (Все метки)


Собственно, делал все вот так:

C++
1
2
3
4
5
6
7
8
Graphics::TBitmap  *tBmp = new Graphics::TBitmap;
 Graphics::TMetafile *MTFile = new Graphics::TMetafile;
 TMetafileCanvas *tMetaCanv = new TMetafileCanvas(MTFile,0);
 MTFile->Height=tBmp->Height;
 MTFile->Width=tBmp->Width;
 tMetaCanv->Draw(0,0,tBmp);
 if(SavePictureDialog1->Execute())
 MTFile->SaveToFile(  SavePictureDialog1->FileName  );
В итоге сохраняется просто пустой файл, размером в несколько байт.
Может быть кто знает другой вариант конвертации из BMP в EMF?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2012, 18:43
Ответы с готовыми решениями:

Преобразование к формату bmp
Пишу программу по стеганографии. Будет предусмотрена работа с разными форматами (bmp, jpeg, png,...

Работа с разными типами изображений (преобразование к одному типу bmp)
Здравствуйте. Есть код: TImage *Infile = new TImage(); TMemoryStream *s = new TMemoryStream;...

Из EMF в текстовый файл
Суть проблемы такова: есть EMF файл содержащий в себе таблицу поступления товаров. ДЛя обмена...

Применение регулярных выражений для парсинга email-ов получателей из emf-файла
Подскажите как применять регулярные выражения к нескольким строкам (заранее количество не известно)...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
10
return (true);
1973 / 1108 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
11.01.2012, 20:12 2
Цитата Сообщение от iFree Посмотреть сообщение
Graphics::TBitmap *tBmp = new Graphics::TBitmap;
Объявить объявили, а откуда в tBmp данные возьмутся?
0
2 / 2 / 0
Регистрация: 11.10.2010
Сообщений: 35
12.01.2012, 00:36  [ТС] 3
Невероятно протупил!

C++
1
tBmp->LoadFromFile(  "filename.bmp"  )
Спасибо, простите за глупость
0
UeArtemis
17 / 17 / 3
Регистрация: 23.09.2011
Сообщений: 204
16.06.2016, 13:22 4
У меня тоже пустой. 0 байт. В чём причина?

Добавлено через 2 часа 37 минут
C++
1
2
3
4
5
6
7
        TMetafile *MF = new TMetafile();
        TMetafileCanvas *tMetaCanv = new TMetafileCanvas(MF,0);
 
        MF->Width=ImageFon->Picture->Height;
        MF->Height=ImageFon->Picture->Width;
        tMetaCanv->Draw(0,0,ImageFon->Picture->Bitmap);
        MF->SaveToFile("tmp_test.emf");
Пустой файл получается.
0
Практикантроп
4676 / 2597 / 495
Регистрация: 23.09.2011
Сообщений: 5,573
16.06.2016, 16:00 5
Цитата Сообщение от TheDarkMax2 Посмотреть сообщение
Пустой файл получается.
А так...
C++
1
2
3
4
5
6
7
8
   TMetafile *MF = new TMetafile();
   MF->Width=ImageFon->Picture->Height;
   MF->Height=ImageFon->Picture->Width;
 
   TMetafileCanvas *tMetaCanv = new TMetafileCanvas(MF,0);
   tMetaCanv->Draw(0,0,ImageFon->Picture->Bitmap);
   delete tMetaCanv;
   MF->SaveToFile("tmp_test.emf");
?
2
UeArtemis
17 / 17 / 3
Регистрация: 23.09.2011
Сообщений: 204
16.06.2016, 16:09 6
Помогло! Не уж-то важно когда удалять метаканву?
0
Практикантроп
4676 / 2597 / 495
Регистрация: 23.09.2011
Сообщений: 5,573
16.06.2016, 16:26 7
Цитата Сообщение от TheDarkMax2 Посмотреть сообщение
Не уж-то важно когда удалять метаканву?
Получается - да.
2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30873 / 20193 / 7877
Регистрация: 22.10.2011
Сообщений: 35,059
Записей в блоге: 6
16.06.2016, 19:06 8
Если читать доки - все станет гораздо понятнее:
Use TMetafileCanvas as a surface on which to draw a metafile image. When the canvas is destroyed, it transfers the image into the metafile object provided to the canvas constructor. After the image is drawn on the canvas and the canvas is destroyed, the image is 'playable' in the metafile object.
Так что да, нужно сначала удалить TMetafileCanvas, и только потом пытаться сохранять файл.
3
UeArtemis
17 / 17 / 3
Регистрация: 23.09.2011
Сообщений: 204
17.06.2016, 13:30 9
Большое спасибо.
Кстати, а почему, если выставляешь "физические" параметры, картинка не влазит в поле? Она примерно на 1,1 больше.
C++
1
2
3
4
5
        MF->Inch=MyForm1->PixelsPerInch;
        MF->MMWidth=254*ImageFon->Picture->Width/MF->Inch;
        MF->MMHeight=254*ImageFon->Picture->Height/MF->Inch;
        MF->SetSize(ImageFon->Width*1.1,
                    ImageFon->Height*1.1);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30873 / 20193 / 7877
Регистрация: 22.10.2011
Сообщений: 35,059
Записей в блоге: 6
17.06.2016, 13:59 10
Смотри:
254*120/1440 = 17 при целочисленном делении. А на самом деле в ответе 17.63... Вот тебе и источник ошибки.
1
UeArtemis
17 / 17 / 3
Регистрация: 23.09.2011
Сообщений: 204
17.06.2016, 14:11 11
Так тогда картинка была бы меньше, а тут больше.
Не влазит в размеры указанные в пикселях.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2016, 14:11

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Преобразование EMF в BMP
Казалось бы пустяковая вещь - ЕMF перевести в BMP, но не все так гладко :-( Возникла следующая...

Конвертирование из emf в bmp
Пытался сконвертировать из emf в bmp след. образом System.IO.FileStream fs = new...

Редактирование .bmp, .emf картинок
Имеются картинки в формате .bmp или .emf, которые отображаются на карте по мере появления событий....

Преобразование изображений в BMP
Доброго времени суток! Я знаю такой класс как Bitmap, но к сожалению он оказался очень медленным...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.