Форум: "Media";
Текущий архив: 2010.10.17;
Скачать: [xml.tar.bz2];
Внизсклеивание изображения Найти похожие ветки
← →
Незнайка (2008-03-31 01:27) [0]У меня есть два изображения. Задача следующая, нужно пристыковать к первому изображению справа или с низу второе изображение и сохранить результат. Размеры изображений одинаковые. Подскажите, как это можно сделать?
Заранее спасибо.
← →
{RASkov} © (2008-03-31 02:45) [1]> [0] Незнайка (31.03.08 01:27)
два изображения - это два холста? Это имелось в виду?... т.е. Канва Битмапов например....
Создать "третье изображение" установив ему нужные размеры, ну и методы холстов или работа с холстом: CopyRect например, или Draw.... также есть BitBlt - тоже может помочь...
← →
Незнайка (2008-03-31 21:17) [2]Итак, в Image1 поместил первое изображение, в Image2 второе
размер изображений 100х100.
var
bmp1, bmp2, bmp3: TBitmap;
begin
//загрузить исходное изображение
image1.Picture.LoadFromFile("C:\1.bmp");
image2.Picture.LoadFromFile("C:\1a.bmp");
bmp1 := TBitmap.Create;
bmp2 := TBitmap.Create;
bmp3 := TBitmap.Create;
bmp1.Assign(image1.Picture);
bmp2.Assign(image1.Picture);
bmp3.Assign(bmp1);
BitBlt(bmp3.Canvas.Handle, 100, 0, 100, 100,
bmp2.Canvas.Handle, 0, 0, SRCCOPY);
bmp3.SaveToFile("C:\3.bmp"); // сохраняем результат на диск
image2.Picture.LoadFromFile("C:\3.bmp");
bmp1.Free; bmp2.Free; bmp3.Free;
end;
но ничего не происходит
если в BitBlt по координате х поставит 50
BitBlt(bmp3.Canvas.Handle, 50, 0, 100, 100, bmp2.Canvas.Handle, 0, 0, SRCCOPY);
то все работает, но первое изображение и второе усечено на половину. Т.е. при выполнении
bmp3.Assign(bmp1);
Canvas задается размером 100х100 и поэтому за его приделами ничего не рисуется. Как изменить (увеличить) размеры Canvas?
← →
Незнайка (2008-03-31 21:38) [3]вопрос снят :)
Простое использование Width и Height
{RASkov} Спасибо за подсказку
← →
{RASkov} © (2008-03-31 23:18) [4]> [3] Незнайка (31.03.08 21:38)
> {RASkov} Спасибо за подсказку
Спасибо-то... спасибо.... т.е. пожалуйста, но только вот в [2] ужас какой-то :) Я не так подсказывал )
В прочем не то что бы ужас, но имеется лишнее....
Временного битмапа достаточно одного...
← →
Незнайка (2008-04-01 00:37) [5]Ага, понял, лишнее убрал :)
← →
{RASkov} © (2008-04-01 08:27) [6]> [5] Незнайка (01.04.08 00:37)
> Ага, понял, лишнее убрал
Да, но кое чего не хватает в коде :) Смотри, если вдруг например строка:
> bmp3.SaveToFile("C:\3.bmp"); // сохраняем результат на диск
вызовет исключение, то что будет? Точно, утёк битмап...:(
:о)
← →
antonn © (2008-04-01 08:49) [7]и тут я подскажу и всех спасу %)
try..finally
← →
Незнайка (2008-04-02 03:12) [8]с форматом bmp код работает на ура, а вто с jpg выдает ошибку на строке
bmp1.Assign(image1.Picture);
говорит что типы TPicture и TBitmap несовместимы. Ну это и понятно, мы создали класс TBitmap.
А как работать с jpg?
← →
{RASkov} © (2008-04-02 10:46) [9]> [8] Незнайка (02.04.08 03:12)
> А как работать с jpg?
Для этих нужно
uses ...., Jpeg;
ну и TJPEGImage;
Но тебе нужно все равно делать через временный bmp....var
BMP: TBitmap; JPG: TJPEGImage;
begin
//загрузить исходное изображение
image1.Picture.LoadFromFile("C:\1.bmp");
image2.Picture.LoadFromFile("C:\1a.bmp");
bmp := TBitmap.Create;
try
bmp.width:=image1.Picture.bitmap.width;
bmp.height:=image1.Picture.bitmap.heigth+image2.Picture.bitmap.height;
bmp.Canvas.Draw(0,0,image1.Picture.bitmap);
bmp.Canvas.Draw(0,image1.Picture.bitmap.heigth, image2.Picture.bitmap);
JPG:=TJPEGImage.create;
try
JPG.Assign(BMP);
JPG.SaveToFile("C:\3.jpg"); // сохраняем результат на диск
finally
jpg.Free;
end;
finally
bmp.Free;
end;
end;
Если у тебя исходные файлы "джепеги", то переделай чуток код....
← →
Незнайка (2008-04-02 17:37) [10]вот если исходник джепеги то ничего не выходит
image1.Picture.LoadFromFile("C:\1.jpg");
image2.Picture.LoadFromFile("C:\1a.jpg");
bmp := TBitmap.Create;
...
bmp.width:=image1.Picture.bitmap.width;
bmp.height:=image1.Picture.bitmap.heigth+image2.Picture.bitmap.height;
bmp.Canvas.Draw(0,0,image1.Picture.bitmap);
...
bmp.Canvas.Draw(0,0,image1.Picture.bitmap); после этого выполнения, стирается изображение в image1 и в bmp ничего не переносится
т.е. если в Image1 и Image2 хранится не bmp а jpg то ничего не получается
возможно ли изображение jpg из Image1 взять как bmp?
← →
Незнайка (2008-04-02 17:51) [11]Взял вот такой код с BMP работает как часы, на все 100
image1.Picture.LoadFromFile("C:\0.bmp");
image2.Picture.LoadFromFile("C:\0a.bmp");
image3.Picture.LoadFromFile("C:\0.bmp");
image3.Picture.Bitmap.width := image1.Picture.bitmap.width +
image2.Picture.bitmap.width;
image3.Picture.Bitmap.Canvas.Draw(image2.Picture.bitmap.width,0,image2.Picture.b itmap);
Вот такой код тоже самое но JPG уже не работает, изображения выбираются из image1 и image2, в image3 никаких результатовimage1.Picture.LoadFromFile("C:\0.jpg");
image2.Picture.LoadFromFile("C:\0a.jpg");
image3.Picture.LoadFromFile("C:\0.jpg");
image3.Picture.Bitmap.width := image1.Picture.bitmap.width +
image2.Picture.bitmap.width;
image3.Picture.Bitmap.Canvas.Draw(image2.Picture.bitmap.width,0,image2.Picture.b itmap);
причем исчезновение изображения пропадает уже после
image3.Picture.Bitmap.width := image1.Picture.bitmap.width +
image2.Picture.bitmap.width;
← →
{RASkov} © (2008-04-02 21:33) [12]> [11] Незнайка (02.04.08 17:51)
uses Jpeg, Math;
procedure TForm1.Button1Click(Sender: TObject);
var JPG1, JPG2, JPG_Out: TJPEGImage; BMP: TBitMap;
begin
JPG1:=TJPEGImage.Create;
JPG2:=TJPEGImage.Create;
try
JPG1.LoadFromFile("1.jpg");
JPG2.LoadFromFile("2.jpg");
BMP:=TBitMap.Create;
try
BMP.Width:=Max(JPG1.Width, JPG2.Width);
BMP.Height:=JPG1.Height+JPG2.Height;
BMP.Canvas.Draw(0, 0, JPG1);
BMP.Canvas.Draw(0, JPG1.Height, JPG2);
JPG_Out:=TJPEGImage.Create;
try
JPG_Out.Assign(BMP);
JPG_Out.SaveToFile("3.jpg");
finally
JPG_Out.Free;
end;
finally
BMP.Free;
end;
finally
JPG1.Free; JPG2.Free;
end;
end;
← →
{RASkov} © (2008-04-02 21:45) [13]> [10] Незнайка (02.04.08 17:37)
> bmp.Canvas.Draw(0,0,image1.Picture.bitmap); после этого
> выполнения, стирается изображение в image1 и в bmp ничего
> не переносится
Потому как в TGraphic(image1.Picture.bitmap) ничего нет мы ж не битмап загрузили, верно?
Кстати.... попробуй так:bmp.Canvas.Draw(0,0,image1.Picture.graphic);
;)
> [11] Незнайка (02.04.08 17:51) вторая часть
Тоже самое... ты ж к битмапу тыркаешься, а в контейнере jpeg... Удачи)
← →
Незнайка (2008-04-02 23:13) [14]Класс, все работает, спасибо!!!
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2010.10.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c