Форум: "Media";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
ВнизКак отобразить одну картинку на другой? Найти похожие ветки
← →
leonidus (2007-11-30 00:20) [0]Суть проблемы: есть два файла, один это большая картинка скажем 1024 на 768, второй маленькая, скажем 100 на 100. Нужно нарисовать маленькое изображение на большом, ну т.е. "слепить" их. Думал сделать так:
btm_big:=tbitmap.Create;
jpg_big:=TJpegImage.Create;
jpg_big.LoadFromFile(edit1.text);
btm_big.Assign(jpg_big);
btm_small:=tbitmap.Create;
jpg_small:=TJpegImage.Create;
jpg_small.LoadFromFile(edit2.text);
btm_small.Assign(jpg_big);
btm_big.Canvas.Draw(100,100,btm_small);
jpg_big.Assign(btm_big);
jpg_big.SaveToFile(edit1.Text+".jpeg");
Но что-то ничего не выходит...
← →
{RASkov} © (2007-11-30 01:16) [1]> btm_big.Assign(jpg_big);
> btm_small.Assign(jpg_big);
Ты один в один перенес код?
Вот практически тоже самое, что и у тебя.... только что проверил - работает:var Bmp: TBitMap; Jpg: TJPEGImage;
begin
Bmp:=TBitMap.Create;
Jpg:=TJPEGImage.Create;
try
if OPD.Execute then begin //OPD - TOpenPictureDialog
Jpg.LoadFromFile(OPD.FileName);
Bmp.Assign(Jpg);
end else Exit;
if OPD.Execute then begin
Jpg.LoadFromFile(OPD.FileName);
Bmp.Canvas.Draw(Bmp.Width-Jpg.Width-10, Bmp.Height-Jpg.Height-10, Jpg);
end else Exit;
Jpg.Assign(Bmp);
Canvas.Draw(10, 10, Jpg); //Канва формы
Jpg.SaveToFile(ExtractFilePath(ParamStr(0))+"1.jpg");
finally
Bmp.Free;
Jpg.Free;
end;
end;
← →
{RASkov} © (2007-11-30 01:27) [2]Комментарий к коду в [1]
"В первом" ОпенДиалоге выбираем фоновую картинку Jpeg формата,
"Во втором" - выбираем "логотипчик", т.е. маленькую картинку Jpeg формата,
Затем получившееся "добро" рисуется на форме и сохраняется в файле 1.jpg "рядом" с экзешником...
"Желательно" что бы фон был на порядок больше чем логотипчик....
"Логотипчик" отрисовывается в нижнем правом углу "фона".
← →
leonidus (2007-11-30 13:10) [3]{RASkov} большое спасибо, ваш код действительно работает.
Но тогда вопрос в продолжение. Если картинка прямоугольная то все ок, но мне нужно перед склеиванием маленькую картинку повернуть на некий угол, при этом я получаю прямоугольник с картинкой и соотв. белыми уголками (маленькую картинку я разворачиваю в фотошопе). Но мне они не нужны, а нужно что бы они были прозрачны. Делаю так:
var
Bmp: TBitMap; Jpg: TJPEGImage;
OldBkMode:integer;
begin
Bmp:=TBitMap.Create;
Jpg:=TJPEGImage.Create;
try
if OPD.Execute then begin //OPD - TOpenPictureDialog
Jpg.LoadFromFile(OPD.FileName);
Bmp.Assign(Jpg);
end else Exit;
if OPD.Execute then begin
Jpg.LoadFromFile(OPD.FileName);
OldBkMode := SetBkMode(bmp.Canvas.Handle, TRANSPARENT);
Bmp.Canvas.Draw(Bmp.Width-Jpg.Width-10, Bmp.Height-Jpg.Height-10, Jpg);
SetBkMode(bmp.Canvas.Handle, OldBkMode);
end else Exit;
Jpg.Assign(Bmp);
Jpg.SaveToFile(ExtractFilePath(ParamStr(0))+"1.jpg");
finally
Bmp.Free;
Jpg.Free;
end;
Но не пашет. Мне так удавалось раньше текст прозрачный размещать, но вот с картинкой затык...
← →
{RASkov} © (2007-11-30 13:48) [4]> [3] leonidus (30.11.07 13:10)
Попробуй вот так:var Bmp, TmpBmp: TBitMap; Jpg: TJPEGImage;
begin
Bmp:=TBitMap.Create;
Jpg:=TJPEGImage.Create;
try
if OPD.Execute then begin //OPD - TOpenPictureDialog
Jpg.LoadFromFile(OPD.FileName);
Bmp.Assign(Jpg);
end else Exit;
if OPD.Execute then begin
TmpBmp:=TBitMap.Create;
try
Jpg.LoadFromFile(OPD.FileName);
TmpBmp.Assign(Jpg);
TmpBmp.TransparentColor:=TmpBmp.Canvas.Pixels[0,0];
TmpBmp.Transparent:=True;
Bmp.Canvas.Draw(Bmp.Width-Jpg.Width-10, Bmp.Height-Jpg.Height-10, TmpBmp);
finally
TmpBmp.Free;
end;
end else Exit;
Canvas.Draw(10, 35, Bmp);
Jpg.Assign(Bmp);
Jpg.SaveToFile(ExtractFilePath(ParamStr(0))+"2.jpg");
finally
Bmp.Free;
Jpg.Free;
end;
end;
Только я не думаю, что это "правильный" вариант.... с транспорентами, поворотами - нужен более профессианальный подход....
Можно посмотреть в кладовке "демку" от antonn"а. Пример помоему называется Scanline.... Как раз для твоих целей....)
← →
{RASkov} © (2007-11-30 13:55) [5]> [3] leonidus (30.11.07 13:10)
> ваш код действительно работает.
:)
Это не мой.... это твой код, я просто оформил его "по своему"....
Сравни с [0] - "один в один" :)
В [1] было замечание по jpg_big.... т.е. и большой битмап и маленький ассигнились с одним и тем же джепегом....
← →
leonidus (2007-11-30 14:26) [6]Код работает прекрасно. Большое спасибо. А почему вы считает что это не профессиональный подход?
← →
{RASkov} © (2007-11-30 14:34) [7]> [6] leonidus (30.11.07 14:26)
> А почему вы считает что это не профессиональный подход?
Поэксперементируй с разными фонами и разными лого (причем бери обычные джепег картинки, а не подготовленные специально для этого) и ты увидешь "проблему стандартного подхода" к битмапам.....
хотябы тот же транспарент.... он не будет таким гладким, как хотелось бы
В общем удачи..... я рад что тебе вполне хватило и кода выше :)
← →
leonidus (2007-11-30 19:36) [8]Я понял уже, буду экспериментировать. Спасибо.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c