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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2013, 01:51   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Вопрос Граф. редактор, редактируемое изображение и канва

Доброго времени суток!

В разрабатываемом проекте требуется создать некий редактор, который позволит поверх изображения bmp, png, jpg накладывать текст в нужное место.

Собственно не сложно:
Ткнул кнопку "Текст" появился TLabel и бегает за мышкой, пока не будет MouseDown в рабочей области, как только шлёпнулся, то там и рисуется текст.

+/- пара таймеров.

Проблема гораздо раньше:
В роли рабочей области, что лучше всего применить TPaintBox или TImage?


Далее, у TBitmap, TPNGImage, TJPEGImage общее 1 - Canvas.
Загружается пикча, по расширению смотрится тип изображения, и пикча лезет в соотв. тип переменой. Далее надо в рабочей области отобразить это изображение, собственно КАК?
Человек_Борща вне форума Ответить с цитированием
Старый 27.04.2013, 05:12   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще я считаю что там лучше подходит пейнтбокс.

2)заведите битмап для реального рисунка, и в него уже копируйте изображение из файла.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.04.2013, 06:16   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию Стало интересно, набросал что-то.

Собственно, вот, опытный образец. при сохранинии в SaveDialog нужно вписывать расширение файла, то есть не "1", а "1.jpg"/"1.png"/"1.bmp".
Ну, доработаете. Просто было интересно, как сделать, а уж на тонкостях не заморачивался.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 27.04.2013, 08:30   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Пепел Феникса, да так и сделано =)

Но как в этот Bitmap загрузить jpg, png?
Код:
procedure TPrintTemplate.LoadImageFromFile(aFile: string);
var
  sFile, sExt: string;
begin
  sFile := aFile;
  if not FileExists(sFile) then
    Exit;

  sExt := ExtractFileExt(LowerCase(sFile));
  if (sExt = '.bmp') then
    fImgType := isBMP;
  case fImgType of
    isBMP:
      begin
        fBitmap.LoadFromFile(sFile);
        if Assigned(fWorkArea) then
        fWorkArea.Canvas.Draw(0,0,fBitmap);
      end;
  end;
  fCanvas := fBitmap.Canvas;
  fImgSrc := sFile;
end;
Rin, благодарю, может у вас найдется ответ =)
Человек_Борща вне форума Ответить с цитированием
Старый 27.04.2013, 08:48   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как в этот Bitmap загрузить jpg
http://delphiworld.narod.ru/_all_articles_.html
Раздел JPEG - [14]
Цитата:
png?
Предложу использовать GDI+. Хотя не в курсе есть ли в последних Делфи работа с PNG
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.04.2013, 09:41   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

GIFImage pngimage для Д7 найти в сети, для более новых возможно в составе уже есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.04.2013, 11:11   #7
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Сделал так: при загрузке изображения анализируется расширение,
потом переводится в bmp и грузится в TImage.
Код:
  
uses pngimage, JPEG;

   procedure JPG2BMP(const what_your_name:string);
   procedure PNG2BMP(const what_your_name:string);

var

  jpeg: TJPEGImage;
  bmp:  TBitmap;
  png: TPNGImage;
...................
procedure TForm1.JPG2BMP(const what_your_name: string);
begin
  jpeg := TJPEGImage.Create;
  try
    jpeg.CompressionQuality := 100; {Default Value}
    jpeg.LoadFromFile(what_your_name);
    bmp := TBitmap.Create;
    try
      bmp.Assign(jpeg);
      Image1.Picture.Assign(bmp);
    finally
      bmp.Free
    end;
  finally
    jpeg.Free
  end;
end;

procedure Tform1.PNG2BMP(const what_your_name: string);
begin
  png := TPNGImage.create;
  try
    png.loadfromfile(what_your_name);
    bmp := tbitmap.create;
    try
      bmp.assign(png);
      Image1.Picture.Assign(bmp);
      finally
      bmp.free;
    end;
    finally
    png.free;
   end;
 end;
Когда сохраняем, анализируем, в каком расширении мы сохраняем и, если что, переводим в нужный нам формат:
Код:
   procedure BMP2JPG(const what_your_name:string);
   procedure BMP2PNG(const what_your_name:string);
.........
procedure TForm1.BMP2JPG(const what_your_name: string);
begin
  JPEG := TJPEGImage.Create;
  Bmp := TBitmap.Create;
  try
    bmp.Assign(Image1.Picture.Bitmap);
    JPEG.Assign(Bmp);
    JPEG.SaveToFile(what_your_name);
  finally
    JPEG.Free;
    Bmp.Free;
  end;
end;

procedure Tform1.BMP2PNG(const what_your_name: string);
begin
 bmp := tbitmap.create;
 try
   bmp.Assign(Image1.Picture.Bitmap);
   png := TPNGImage.create;
   try
     png.assign(bmp);
     png.savetofile(what_your_name);
     finally
     png.free;
   end;
   finally
   bmp.free;
 end;
end;
В приложенном архиве есть все, что нужно для работы с PNG.
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 27.04.2013 в 11:14.
Rin вне форума Ответить с цитированием
Старый 28.04.2013, 10:08   #8
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Дабы избежать ошибок определения типа файлов, я в своем проекте использовал анализ сигнатуры файла, а не расширение. Сразу избавит от лишних проблем. Таблицу сигнатур легко составить путем перебора файлов. Сейчас уже не помню, но вроде 5 байт хватало для определения всех основных форматов файлов.
Исходник не привожу к.т. он вероятно утерян.
kangreon вне форума Ответить с цитированием
Старый 28.04.2013, 12:25   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

kangreon, в моём случае будет достаточно и расширения =)
Человек_Борща вне форума Ответить с цитированием
Старый 28.04.2013, 16:47   #10
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Цитата:
Rin, благодарю, может у вас найдется ответ =)
Разобрались?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
редактируемое окно что бы можно было менять текст Николай_Kolumb Помощь студентам 5 25.04.2012 18:00
График (канва) m0dE Помощь студентам 3 11.10.2011 09:04
treeview и канва. blackstersl Мультимедиа в Delphi 4 06.06.2009 10:02
C++ for DOS (задачка, граф.редактор) Nixtone Общие вопросы C/C++ 1 18.05.2009 20:58
Канва bekart Общие вопросы Delphi 2 29.11.2007 22:54