![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывод изображения повер другого и сохранение всего этого в файл. [D7, WinXP]
Den © (2007-11-14 10:09:00)Здравствуйте.
Подскажите пожалуста как можно решить данную задачу.
Необходимо поверх заданного каким-либо образом изображения вывести какие-либо цифры или изображения меньше размером, а потом полученный результат сохранить в файл. Данная процедура должна производиться где-то около 3000 раз, каждый раз накладывая разные цифпы и картинки и сохраняя в новый файл.
Я в этом дуб дубом, так что пожалуйста подскажите с помощью чего это можно сделать и как.
(2007-12-13 18:16:00) [1]Удалено модератором
Den (2007-11-14 21:39:00) [2]
> homm © (14.11.07 20:08) [14]
> tbitmap.canvas.textout
спасибо за подсказку.
> {RASkov} (14.11.07 20:18) [15]
Вот от нечего делать "слепил"
> для тебя "примерчик"...
большое спасибо за пример.
> Вообщем думаю разберешься.... Хотя может быть программа
> уже готова? :)
почти, только сделал цифры картинками.:)
{RASkov} (2007-11-14 20:18:00) [3]> [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;
Вообщем думаю разберешься.... Хотя может быть программа уже готова? :)
homm (2007-11-14 20:08:00) [4]tbitmap.canvas.textout
Den (2007-11-14 19:22:00) [5]спрошу поточнее.
Есть ли какой нибудь способ нарисовать там цифры кроме как сделать набор картинок от 0 до 9 и уже из них получать необходимое число?
Den (2007-11-14 19:17:00) [6]ага, tbitmap.canvas.draw подошло для второй картинки, но как цифры всёравно не допру.
Den (2007-11-14 19:07:00) [7]А вот как именно нарисовать цифры и второй рисунок на первом я не пойму.
Разъясните если не сложно.
вот начало
test:=TBitmap.Create;
test.LoadFromFile('1.bmp');
а как дальше?
Den (2007-11-14 18:52:00) [8]
> [5] уже не подсказка
как раз сейчас про TBitmap и читаю.
Но не занимаясь этим без малого 4 года это довольно сложно.
Потому помощи и попросил,
homm (2007-11-14 18:40:00) [9]> [8] Den (14.11.07 18:19)
> Я же не прошу всё сделать за меня, просто подскажите какие
> компоненты и функции надо использовать для этого
[5] уже не подсказка?
Den (2007-11-14 18:19:00) [10]
> просто я даже не знаю с какого конца взяться за дело.
Вот в этом то помощь и нужна, я незнаю как это сделать.
Я же не прошу всё сделать за меня, просто подскажите какие компоненты и функции надо использовать для этого господа мастера.
ЗЫ: Я не программист, а инженер. Просто увлекался этим на первом курсе.
А программа нужна для друга, который постоянно раскидывает это всё вручную, вот и хочу помочь.
homm (2007-11-14 17:50:00) [11]> [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 (2007-11-14 16:09:00) [12]Постараюсь объяснить как можно более подробно, просто я даже не знаю с какого конца взяться за дело.
Есть фоновая картинка.( 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 :)
И если можно хоть небольшой пример в виде кода.
Jeer (2007-11-14 15:00:00) [13]
> Den (14.11.07 13:38) [3]
Это можно сделать с помощью обычного TBitmap, если не стоит задача отображения.
Перед этим имеющиеся файлы формата X преобразуются в формат bmp, а затем обратно в формат X или другой.
antonn (2007-11-14 13:57:00) [14]а форматы рисунков какие?
Den (2007-11-14 13:38:00) [15]Извините я наверное неправильно написал.
Под словом изображение имелись ввиду русунки, а не видео.
Т.е. рисунки поверх рисунков.
antonn (2007-11-14 12:35:00) [16]накладывать нужно картинки?
Михей (2007-11-14 10:46:00) [17]Необходимо писать Transform Filter, который будет накладывать OSD информацию на видео, ну а потом записывать в файл или выводит на экран... Все это DirectShow. Примеры Transform фильтра есть в DSpack, там же заголовочные базовых классов, описание в SDK. Если Вам, конечно, все это программно надо... Можно также воспользоваться интерфейсом (Sample Grabber Filter) ISampleGrabberCB и методом SampleCB - он напрямую пишет в видеопоток, но лучше первый вариант.