-
Суть проблемы: есть два файла, один это большая картинка скажем 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');
Но что-то ничего не выходит...
-
> 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 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;
-
Комментарий к коду в [1] "В первом" ОпенДиалоге выбираем фоновую картинку Jpeg формата, "Во втором" - выбираем "логотипчик", т.е. маленькую картинку Jpeg формата, Затем получившееся "добро" рисуется на форме и сохраняется в файле 1.jpg "рядом" с экзешником... "Желательно" что бы фон был на порядок больше чем логотипчик.... "Логотипчик" отрисовывается в нижнем правом углу "фона".
-
{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;
Но не пашет. Мне так удавалось раньше текст прозрачный размещать, но вот с картинкой затык...
-
> [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 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.... Как раз для твоих целей....)
-
> [3] leonidus (30.11.07 13:10) > ваш код действительно работает.
:) Это не мой.... это твой код, я просто оформил его "по своему".... Сравни с [0] - "один в один" :) В [1] было замечание по jpg_big.... т.е. и большой битмап и маленький ассигнились с одним и тем же джепегом....
-
Код работает прекрасно. Большое спасибо. А почему вы считает что это не профессиональный подход?
-
> [6] leonidus (30.11.07 14:26) > А почему вы считает что это не профессиональный подход?
Поэксперементируй с разными фонами и разными лого (причем бери обычные джепег картинки, а не подготовленные специально для этого) и ты увидешь "проблему стандартного подхода" к битмапам..... хотябы тот же транспарент.... он не будет таким гладким, как хотелось бы В общем удачи..... я рад что тебе вполне хватило и кода выше :)
-
Я понял уже, буду экспериментировать. Спасибо.
|