Конференция "Media" » Вывод изображения повер другого и сохранение всего этого в файл. [D7, WinXP]
 
  • Den (14.11.07 10:09) [0]
    Здравствуйте.
    Подскажите пожалуста как можно решить данную задачу.
    Необходимо поверх заданного каким-либо образом изображения вывести какие-либо цифры или изображения меньше размером, а потом полученный результат сохранить в файл. Данная процедура должна производиться где-то около 3000 раз, каждый раз накладывая разные цифпы и картинки и сохраняя в новый файл.

    Я в этом дуб дубом, так что пожалуйста подскажите с помощью чего это можно сделать и как.
  • Михей (14.11.07 10:46) [1]
    Необходимо писать Transform Filter, который будет накладывать OSD информацию на видео, ну а потом записывать в файл или выводит на экран... Все это DirectShow. Примеры Transform фильтра есть в DSpack, там же заголовочные базовых классов, описание в SDK. Если Вам, конечно, все это программно  надо...  Можно также воспользоваться интерфейсом (Sample Grabber Filter) ISampleGrabberCB и методом SampleCB - он напрямую пишет в видеопоток, но лучше первый вариант.
  • antonn © (14.11.07 12:35) [2]
    накладывать нужно картинки?
  • Den (14.11.07 13:38) [3]
    Извините я наверное неправильно написал.
    Под словом изображение имелись ввиду русунки, а не видео.
    Т.е. рисунки поверх рисунков.
  • antonn © (14.11.07 13:57) [4]
    а форматы рисунков какие?
  • Jeer © (14.11.07 15:00) [5]

    > Den   (14.11.07 13:38) [3]


    Это можно сделать с помощью обычного TBitmap, если не стоит задача отображения.
    Перед этим имеющиеся файлы формата X преобразуются в формат bmp, а затем обратно в формат X или другой.
  • Den (14.11.07 16:09) [6]
    Постараюсь объяснить как можно более подробно, просто я даже не знаю с какого конца взяться за дело.

    Есть фоновая картинка.(http://img248.imageshack.us/img248/1662/85395026xa5.jpg).
    Есть картинка значка(http://img135.imageshack.us/img135/3355/89877732ob8.jpg).
    И есть некий массив чисел.
    В итоге надо получить что-то типа этого(http://img135.imageshack.us/img135/5440/97630245ct2.jpg) в отдельно графическом файле на жёстком диске.
    И такие файлы должны делаться пока в массиве не закончаться числа.
    Формат картинок фактически не важен.

    Помогите пожалуйста.
    Если не трудно то хоть с небольшими разъяснениями. Если единственное что на  мою просьбу можно ответить это rtfm,то если не затруднит дайте ссылку на нужный fm :)
    И если можно хоть небольшой пример в виде кода.
  • homm © (14.11.07 17:50) [7]
    > [6] Den   (14.11.07 16:09)
    > Есть фоновая картинка.(http://img248.imageshack.us/img248/1662/85395026xa
    > 5.jpg).
    > Есть картинка значка(http://img135.imageshack.us/img135/3355/89877732ob8.
    > jpg).
    > И есть некий массив чисел.
    > В итоге надо получить что-то типа этого(http://img135.imageshack.us/img13
    > 5/5440/97630245ct2.jpg) в отдельно графическом файле на
    > жёстком диске.
    > И такие файлы должны делаться пока в массиве не закончаться
    > числа.
    > Формат картинок фактически не важен.

    Ну ТЗ ты написал, осталось огласить цену.

    Как ты пытался то, покажи, а то в чем помошь нужна — не понятно.
  • Den (14.11.07 18:19) [8]

    > просто я даже не знаю с какого конца взяться за дело.


    Вот в этом то помощь и нужна, я незнаю как это сделать.
    Я же не прошу всё сделать за меня, просто подскажите какие компоненты и функции надо использовать для этого господа мастера.

    ЗЫ: Я не программист, а инженер. Просто увлекался этим на первом курсе.
    А программа нужна для друга, который постоянно раскидывает это всё вручную, вот и хочу помочь.
  • homm © (14.11.07 18:40) [9]
    > [8] Den   (14.11.07 18:19)
    > Я же не прошу всё сделать за меня, просто подскажите какие
    > компоненты и функции надо использовать для этого

    [5] уже не подсказка?
  • Den (14.11.07 18:52) [10]

    > [5] уже не подсказка

    как раз сейчас про TBitmap и читаю.
    Но не занимаясь этим без малого 4 года это довольно сложно.
    Потому помощи и попросил,
  • Den (14.11.07 19:07) [11]
    А вот как именно нарисовать цифры и второй рисунок на первом я не пойму.
    Разъясните если не сложно.
    вот начало
    test:=TBitmap.Create;
    test.LoadFromFile('1.bmp');


    а как дальше?
  • Den (14.11.07 19:17) [12]
    ага, tbitmap.canvas.draw подошло для второй картинки, но как цифры всёравно не допру.
  • Den (14.11.07 19:22) [13]
    спрошу поточнее.
    Есть ли какой нибудь способ нарисовать там цифры кроме как сделать набор картинок от 0 до 9 и уже из них получать необходимое число?
  • homm © (14.11.07 20:08) [14]
    tbitmap.canvas.textout
  • {RASkov} (14.11.07 20:18) [15]
    > [13] Den   (14.11.07 19:22)

    Вот от нечего делать "слепил" для тебя "примерчик"...
    Кинь на форму 1 кнопку(Button1) и 1 чекбокс(CheckBox1)
    пропиши обработчики OnCreate для формы и OnClick для кнопки:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Button1.Left:=0; Button1.Top:=0;
     CheckBox1.Left:=80; CheckBox1.Top:=4; CheckBox1.Width:=140;
     CheckBox1.Caption:='Сохранить в Lotto.bmp';
     Width:=50*9+30; Height:=Button1.Height+50*3+30+GetSystemMetrics(SM_CYCAPTION);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var BFon, BLogo: TBitmap; C, R, N: Byte; Rc: TRect; Bt: set of Byte;
    begin
     BLogo:=TBitmap.Create;
     try
      //Готовим лого-картинку
      with BLogo do begin
       Width:=50;
       Height:=50;
       Canvas.Rectangle(Canvas.ClipRect);
       Canvas.Brush.Color:=clInfoBk;
       Canvas.Pen.Width:=2;
       Canvas.Pen.Color:=clRed;
       Canvas.Ellipse(5, 5, 45, 45);
       Canvas.Font.Style:=[fsBold];
       Canvas.Font.Color:=clNavy;
       Canvas.TextOut(10, 18, 'Lotto');
      end;
      BFon:=TBitmap.Create;
      try
       //Тут "лепим" все картину в целом
       with BFon do begin
        Width:=50*9;
        Height:=50*3;
        Canvas.Font.Name:='Times New Roman';
        Canvas.Font.Size:=25;
        for C:=0 to 8 do
         for R:=0 to 2 do begin
          //Если истина то рисуем цифирку
          if Random(5)<2 then begin
           Rc:=Rect(50*C, 50*R, 50+50*C, 50+50*R);
           Canvas.Rectangle(Rc);
           repeat
            N:=1+Random(99);
           until not (N in Bt);
           Include(Bt, N);
           DrawText(Canvas.Handle, PChar(IntToStr(N)), -1, Rc, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
          end else Canvas.Draw(50*C, 50*R, BLogo); //иначе лого
         end;
       end;
       Canvas.Draw(10, Button1.Height+10, BFon);
       if CheckBox1.Checked then BFon.SaveToFile(ExtractFilePath(Application.ExeName)+'Lotto.bmp');
      finally
       BFon.Free;
      end;
     finally
      BLogo.Free;
     end;
    end;


    Вообщем думаю разберешься.... Хотя может быть программа уже готова? :)
  • Den (14.11.07 21:39) [16]

    > homm ©   (14.11.07 20:08) [14]
    > tbitmap.canvas.textout

    спасибо за подсказку.

    > {RASkov}   (14.11.07 20:18) [15]
    Вот от нечего делать "слепил"
    > для тебя "примерчик"...

    большое спасибо за пример.

    > Вообщем думаю разберешься.... Хотя может быть программа
    > уже готова? :)

    почти, только сделал цифры картинками.:)
  • имя (13.12.07 18:16) [17]
    Удалено модератором
 
Конференция "Media" » Вывод изображения повер другого и сохранение всего этого в файл. [D7, WinXP]
Есть новые Нет новых   [134431   +12][b:0][p:0.002]