Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2008, 01:08   #1
ALEX_RAS
 
Регистрация: 12.05.2008
Сообщений: 5
Вопрос Конвертирование графических форматов файлов

Нужно написать конвертор графических форматов Из (WMF,JPEG,TIFF и др.) в BMP и обратно???

Как решить данную проблему помогите!!!

Заранее спасибо!!!
ALEX_RAS вне форума Ответить с цитированием
Старый 13.05.2008, 03:58   #2
Snoopy
Форумчанин Подтвердите свой е-майл
 
Аватар для Snoopy
 
Регистрация: 14.01.2008
Сообщений: 163
По умолчанию

Цитата:
Как решить данную проблему помогите!!!
Упасть перед поисковиком на колени и спрасить
http://www.delphi.int.ru/articles/14/
http://articles.org.ru/cfaq/index.php?catid=83
Snoopy вне форума Ответить с цитированием
Старый 31.10.2008, 23:01   #3
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Здравствуйте...
Посмотрела я эти статьи... Что-то работает, а вот с чем-то возникли проблемы...
Например
Конвертирование BMP в RTF.

function BitmapToRTF(pict: TBitmap): string ;
var
bi, bb, rtf: string ;
bis, bbs: Cardinal;
achar: ShortString;
hexpict: string ;
I: Integer;
begin
GetDIBSizes(pict.Handle, bis, bbs);
SetLength(bi, bis);
SetLength(bb, bbs);
GetDIB(pict.Handle, pict.Palette, PChar(bi)^, PChar(bb)^);
rtf := '{\rtf1 {\pict\dibitmap0 ' ;
SetLength(hexpict, (Length(bb) + Length(bi)) * 2 );
I := 2 ;
for bis := 1 to Length(bi) do
begin
achar := IntToHex(Integer(bi[bis]), 2 );
hexpict[I - 1] := achar[ 1 ];
hexpict[I] := achar[ 2 ];
Inc(I, 2 );
end ;
for bbs := 1 to Length(bb) do
begin
achar := IntToHex(Integer(bb[bbs]), 2 );
hexpict[I - 1] := achar[ 1 ];
hexpict[I] := achar[ 2 ];
Inc(I, 2);
end ;
rtf := rtf + hexpict + ' }}';
Result := rtf;
end;

тут мне конечно вообще не понятно половина кода, но главный вопрос: как ее вызвать? Я не могу понять что ей передать в качестве параметра?

И еще:
Конвертирование BMP в ICO.

procedure TForm1.Button1Click(Sender: TObject);
var
IconSizeX : integer;
IconSizeY : integer;
AndMask : TBitmap;
XOrMask : TBitmap;
IconInfo : TIconInfo;
Icon : TIcon;
begin
{Получаем размер иконки}
IconSizeX := GetSystemMetrics(SM_CXICON);
IconSizeY := GetSystemMetrics(SM_CYICON);

{Создаём маску "And"}
AndMask := TBitmap.Create;
AndMask.Monochrome := true;
AndMask.Width := IconSizeX;
AndMask.Height := IconSizeY;

{Рисуем на маске "And"}
AndMask.Canvas.Brush.Color := clWhite;
AndMask.Canvas.FillRect(Rect( 0 , 0 , IconSizeX, IconSizeY));
AndMask.Canvas.Brush.Color := clBlack;
AndMask.Canvas.Ellipse( 4 , 4 , IconSizeX - 4 , IconSizeY - 4 );

{Рисуем для теста}
Form1.Canvas.Draw(IconSizeX * 2 , IconSizeY, AndMask);

{Создаём маску "XOr"}
XOrMask := TBitmap.Create;
XOrMask.Width := IconSizeX;
XOrMask.Height := IconSizeY;

{Рисуем на маске "XOr"}
XOrMask.Canvas.Brush.Color := ClBlack;
XOrMask.Canvas.FillRect(Rect( 0 , 0 , IconSizeX, IconSizeY));
XOrMask.Canvas.Pen.Color := clRed;
XOrMask.Canvas.Brush.Color := clRed;
XOrMask.Canvas.Ellipse( 4 , 4 , IconSizeX - 4 , IconSizeY - 4 );

{Рисуем в качестве теста}
Form1.Canvas.Draw(IconSizeX * 4 , IconSizeY, XOrMask);

{Создаём иконку}
Icon := TIcon.Create;
IconInfo.fIcon := true;
IconInfo.xHotspot := 0 ;
IconInfo.yHotspot := 0 ;
IconInfo.hbmMask := AndMask.Handle;
IconInfo.hbmColor := XOrMask.Handle;
Icon.Handle := CreateIconIndirect(IconInfo);

{Уничтожаем временные битмапы}
AndMask.Free;
XOrMask.Free;

{Рисуем в качестве теста}
Form1.Canvas.Draw(IconSizeX * 6 , IconSizeY, Icon);

{Объявляем иконку в качестве иконки приложения}
Application.Icon := Icon;

{генерируем перерисовку}
InvalidateRect(Application.Handle, nil , true);

{Освобождаем иконку}
Icon.Free;
end ;

Что эта функция вообще делает?? Зачем она на форме рисует три рисуночка и заменяет иконку, хотя вроде должна файлы конвертировать???
yulia вне форума Ответить с цитированием
Старый 31.10.2008, 23:07   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
тут мне конечно вообще не понятно половина кода, но главный вопрос: как ее вызвать? Я не могу понять что ей передать в качестве параметра?
TBitmap передать, по сути это и есть BMP, только не файл, а в памяти битмап. Вернет строку. В строке скорее всего будут данные битмапа в текстовом виде, типа как в Hex редакторе.

Цитата:
Что эта функция вообще делает?? Зачем она на форме рисует три рисуночка и заменяет иконку, хотя вроде должна файлы конвертировать???
Эта функция ничего не конвертирует и не сохраняет, она создает иконку с нуля, делает с ней то сё, и убивает в конце.

Доработать эти процедуры не составит труда. В первой не знаю есть ли у тебя необходимость, а во второй нужно сделать загрузку битмапа из файла вместо создания новых, и сохранение иконки в файл. Я так понял под конвертацией ты имеешь ввиду файл в файл?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 31.10.2008 в 23:14.
mutabor вне форума Ответить с цитированием
Старый 31.10.2008, 23:11   #5
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

А можно конкретней?
Вот, например, у меня есть OpenDialog и как из него достать имя файла, который надо переделать и передать в эту функцию?
yulia вне форума Ответить с цитированием
Старый 31.10.2008, 23:19   #6
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Да файл в файл
yulia вне форума Ответить с цитированием
Старый 31.10.2008, 23:23   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Тут все готово, так и оставляй
Код:
var
  bm: TBitmap;
...
if OpenDialog1.Execute then
  begin 
    bm:=TBitmap.Create;
    bm.LoadFromFile(OpenDialog1.FileName);
    BMP2ICO(bm);
    bm.Free;
  end;
Сама процедура
Код:
procedure BMP2ICO(bmp: TBitmap);
begin
{сюда перенесешь нужный код из той процедуры}
тут нужно будет уменьшить изображение до размеров иконки, создать на его основе иконку, ну и сохранить иконку в файл
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 31.10.2008 в 23:41.
mutabor вне форума Ответить с цитированием
Старый 31.10.2008, 23:30   #8
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

спасибо )))
yulia вне форума Ответить с цитированием
Старый 31.10.2008, 23:37   #9
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Получается, что в итоге вызова процедуры у меня будет переменная, например, newfile типа string, которая будет содержать данные битмапа в текстовом виде.. Я правильно понимаю? И мне теперь надо сохранить это в файл с расширением rtf?
yulia вне форума Ответить с цитированием
Старый 31.10.2008, 23:45   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Тебе нужен BMP в виде текста?
И именно в формате RTF? А txt не подойдет?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Встроенный конвертер графических файлов в Windows Air Мультимедиа в Delphi 12 23.03.2008 00:42
конвертирование Hex -> Text и Float -> Int NikOnLine Общие вопросы Delphi 13 22.12.2007 23:11
Открытия графических файлов Kocapb Общие вопросы C/C++ 3 01.12.2007 19:11
Конвертирование из поля Edit в нормальный знак. alikon1 Общие вопросы Delphi 11 27.11.2007 22:53
ищу спецификации различных форматов файлов bphoenix Свободное общение 2 14.04.2007 13:06