Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2011, 18:32   #1
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию Склеиваие картинок

Подскажите пожалуйста, каким способом можно склеить несколько одинаковых по размеру и формату картинок?
Crunkordie вне форума Ответить с цитированием
Старый 18.02.2011, 19:15   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Код:
a,b,c:TBitMap;
 
a:=TBitMap.Create;
b:=TBitMap.Create;
c:=TBitMap.Create;
a.height := 100;
a.wight := 100;
b.height := 100;
b.wight := 100;
a.LoadFromFile('.....1');
b.LoadFromFile('.....2');
c.height := a.height + b.height
c.wight := a.wight + b.wight
c.canvas.fraw(0,0,a);
c.canvas.fraw(100,0,b);
что то в етом роде, за ошибки в словах извеняите
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.02.2011, 20:54   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://programmersforum.ru/showthrea...741#post305741
поиском надо пользоватся хоть иногда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.02.2011, 20:48   #4
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, JPEG, IdBaseComponent, IdAntiFreezeBase,
  IdAntiFreeze;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image4: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
    Form1: TForm1;
    x,y,z: integer;
    Level: array [0..8] of integer;
    JpegT : TJPEGImage;
    Bmp, BmpOut: TBitmap;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
    i, k, s: integer;
 
begin
  x:=0;
  y:=0;
  z:=1;
  k:=256;
  s:=StrToInt(FloatToStr(exp(z*ln(2))))-1;
  for i:=0 to 8 do begin
                     Level[i]:=k;
                     k:=k+k;
                   end;
 
  JpegT := TJPEGImage.Create;
  Bmp := TBitmap.Create;
  BmpOut := TBitmap.Create;
  BmpOut.Height:=Level[z];
  BmpOut.Width:=Level[z];
 
  for y:=0 to s do
       for x:=0 to s do begin
                            JpegT.LoadFromFile('d:\1\z'+IntToStr(z)+'\'+IntToStr(x)+'_'+IntToStr(y)+'_'+IntToStr(z)+'.jpg');
                            Bmp.Assign(JpegT);
                            BmpOut.Canvas.CopyRect(Rect(256*x,256*y,256+256*x,256+256*y),Bmp.Canvas,Rect(0,0,256,256));
                            Image4.Picture.Bitmap:=BmpOut;
                            bmp.FreeImage;
                        end;
  BmpOut.SaveToFile('d:\x'+IntToStr(z)+'.jpg');
 
end;
 
end.
Программа клеит картинки. Куски весят ~15 кб, а при склеивании и сохранении, уже целая картинка весит в десятки раз больше кусков. Возможно ли с этим справить?
Crunkordie вне форума Ответить с цитированием
Старый 19.02.2011, 21:43   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
BmpOut.SaveToFile('d:\x'+IntToStr(z )+'.jpg');
а вы вкурсе что вы в bmp формате сохраняете?
ищите код сохранения в jpg(это не тупо поменять расширение)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.02.2011, 21:44   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

на форме должны быть Button1, OpenPictureDialog1
сохраняет в оба формата
Код:

procedure TForm1.Button1Click(Sender: TObject);
var
  myJpg1, myJpg2, mySaveJpg: TJPEGImage;
  myBmp: TBitmap;
begin
  myJpg1 := TJPEGImage.Create;
  ShowMessage('Select First Picture');
  if OpenPictureDialog1.Execute then myJpg1.LoadFromFile(OpenPictureDialog1.FileName);
  myJpg2 := TJPEGImage.Create;
  ShowMessage('Select Second Picture');
  if OpenPictureDialog1.Execute then myJpg2.LoadFromFile(OpenPictureDialog1.FileName);
  ShowMessage('Creating and Saving Images');
  myBmp := TBitmap.Create;
  with myBmp do
  begin
    Height := myJpg1.Height + ABS(myJpg1.Height - myJpg2.Height);
    Width := myJpg1.Width + myJpg2.Width;
    Canvas.Draw(0,0,myJpg1);
    Canvas.Draw(myJpg1.Width,0,myJpg2);
    SaveToFile('C:\ArtGrekBmp.bmp');
  end;
  mySaveJpg := TJPEGImage.Create;
  mySaveJpg.Assign(myBmp);
  mySaveJpg.SaveToFile('C:\ArtGrekBmp.jpg');
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 19.02.2011, 22:46   #7
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию

ArtGrek, спасибо большое, пример очень помог, но как быть, если необходимо склеить куча файлов? Сделал так...
Код:
//level=[256,512,1024,2048 ....]
var
  myJpg1, myJpg2, mySaveJpg: TJPEGImage;
  myBmp: TBitmap;
begin
  x:=0;
  y:=0;
  z:=4;
  s:=StrToInt(FloatToStr(exp(z*ln(2))))-1;
  myJpg1 := TJPEGImage.Create;
  myJpg2 := TJPEGImage.Create;
  myBmp := TBitmap.Create;
  for y:=0 to s do
       for x:=0 to s do begin
                             myJpg1.LoadFromFile('d:\x\z'+IntToStr(z)+'\'+IntToStr(x)+'_'+IntToStr(y)+'_'+IntToStr(z)+'.jpg');
  with myBmp do
  begin
    Height := Level[z];
    Width := Level[z];
    Canvas.Draw(256*x,256*y,myJpg1);
    Canvas.Draw(256+256*x,256+256*y,myJpg2);
  end;
  end;
  mySaveJpg := TJPEGImage.Create;
  mySaveJpg.Assign(myBmp);
  mySaveJpg.SaveToFile('d:\y\m'+IntToStr(z)+'.jpg');

end;
Если необходимо склеить 64 файла, то все нормально, но когда необходимо склеить 256 файлов, то программа ругается : "Недостаточно памяти для обработки команды". И еще... на последнем этапе будет 65536 файлов, т.о. необходимо разрешение последней картинки 65536х65536, но при записи в Bitmap.Height этого числа сразу же выдается ошибка, которая выше. Как быть?
Crunkordie вне форума Ответить с цитированием
Старый 19.02.2011, 22:49   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

разрешите поинтересоваца, что за программу вы делаете?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 19.02.2011, 22:58   #9
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию

Я написал программу, которая скачивает с гугла карту мира при зуме от 0 до 8. А теперь пытаюсь склеить все эти изображение. А вообще, в конце должна получиться программа-карта мира. Есть еще один вариант реализации такой программы, это склеивать не сразу все карту, а по ходу использования программы.
Crunkordie вне форума Ответить с цитированием
Старый 19.02.2011, 23:04   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

могу расчитывать на то что картинки все одинаковых размеров?
___________________________________ _______________________
замените на ето
Код:
    Canvas.StretchDraw(Rect(0,0,100,100),myJpg1);
    Canvas.StretchDraw(Rect(100,0,200,100),myJpg2)
VirusN13

Последний раз редактировалось ArtGrek; 19.02.2011 в 23:09.
ArtGrek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просмотрщик картинок VLGENERAL Мультимедиа в Delphi 15 06.01.2012 21:54
Сжатие картинок MOROZILnic Помощь студентам 0 02.06.2010 20:04
TrackBar с картинок nXs Компоненты Delphi 0 19.05.2010 12:37
Ресайзер картинок Дождик PHP 4 08.04.2010 08:51
Просмоторщик картинок sting Мультимедиа в Delphi 7 10.06.2009 09:41