Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1244387849
cyber-pilot
2009-06-07 19:17
2009.08.09
MapReduce на Delphi


15-1244183113
Dennis I. Komarov
2009-06-05 10:25
2009.08.09
MS VC++ 2008 EE (или УЮ :) )


11-1205090359
andreil
2008-03-09 22:19
2009.08.09
UnZip для массива


15-1243996706
brother
2009-06-03 06:38
2009.08.09
сайт одноклассники хакнули?


1-1211807607
Jungle
2008-05-26 17:13
2009.08.09
"Правильно" преобразовать тип Variant





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский