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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2013, 14:39   #1
DLev2
Пользователь
 
Регистрация: 26.09.2009
Сообщений: 22
Печаль TImage

Проблема в "склеивании" картинок.
кто может подсказать?
есть 2 картинки, img1 и img2 (не совпадающих размеров)
как склеить их в одну например по горизонтали.
например так
Код:
r1,r2: TRect;
    BSum: TBitmap;
Код:
 Img2.Picture.Bitmap.Handle:=Clipboard.GetAsHandle(CF_bitmap);
  BSum.Width:= img1.Picture.Bitmap.Width+img2.Picture.Bitmap.Width;
  BSum.Height:= Max(img1.Picture.Bitmap.Height,img2.Picture.Bitmap.Height);
  r1 := Rect(0,0,img1.Picture.Bitmap.Width-1,img1.Picture.Bitmap.Height-1);
  BSum.Canvas.CopyRect(r1,img1.Picture.Bitmap.Canvas,r1);

  r1 := Rect(0,0,img2.Picture.Bitmap.Width-1,img2.Picture.Bitmap.Height-1);
  r2 := Rect(img1.Picture.Bitmap.Width,0,img1.Picture.Bitmap.Width+img2.Picture.Bitmap.Width-1,img2.Picture.Bitmap.Height-1);
  BSum.Canvas.CopyRect(r2,img2.Picture.Bitmap.Canvas,r1);
  img1.Picture.Bitmap:=BSum;
падает на строчке
Код:
BSum.Width:= img1.Picture.Bitmap.Width+img2.Picture.Bitmap.Width;
С чем его надо инициализировать?

Последний раз редактировалось DLev2; 11.08.2013 в 15:08.
DLev2 вне форума Ответить с цитированием
Старый 11.08.2013, 15:08   #2
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

http://programmersforum.ru/showthrea...741#post305741
Le0n4iko_o вне форума Ответить с цитированием
Старый 11.08.2013, 15:09   #3
DLev2
Пользователь
 
Регистрация: 26.09.2009
Сообщений: 22
По умолчанию

да, смотрел, проблема в том что после
Код:
Img1.Picture.SaveTofile('image'+'.jpeg');
данная картинка не открыватся delphi
DLev2 вне форума Ответить с цитированием
Старый 11.08.2013, 15:20   #4
DLev2
Пользователь
 
Регистрация: 26.09.2009
Сообщений: 22
По умолчанию

Выложу полный отредактированный код, сейчас проблема в том, что первая картинка становится белой, при склеивании сначало белый фон, затем 2 картинка.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
    r1,r2: TRect;
    BSum: TBitmap;
begin
if Clipboard.HasFormat(CF_BITMAP) then
  begin
  if LOOK=1 then
    begin
    Img1.Picture.Bitmap.Handle:=Clipboard.GetAsHandle(CF_bitmap);  //вставляем в первую картинку буфер
    LOOK:=2;
    exit;
    end;

  BSum:= TBitmap.Create;
  Img2.Picture.Bitmap.Handle:=Clipboard.GetAsHandle(CF_bitmap);  //Вставляем во вторую картинку буфер (при 2 вызове)
  BSum.Width:= img1.Picture.Bitmap.Width+img2.Picture.Bitmap.Width;
  BSum.Height:= Max(img1.Picture.Bitmap.Height,img2.Picture.Bitmap.Height);
  r1 := Rect(0,0,img1.Picture.Bitmap.Width-1,img1.Picture.Bitmap.Height-1);
  BSum.Canvas.CopyRect(r1,img1.Picture.Bitmap.Canvas,r1);

  r1 := Rect(0,0,img2.Picture.Bitmap.Width-1,img2.Picture.Bitmap.Height-1);
  r2 := Rect(img1.Picture.Bitmap.Width,0,img1.Picture.Bitmap.Width+img2.Picture.Bitmap.Width-1,img2.Picture.Bitmap.Height-1);
  BSum.Canvas.CopyRect(r2,img2.Picture.Bitmap.Canvas,r1);
  img1.Picture.Bitmap.Assign(BSum);
  BSum.Free;
  end
else
  begin
  ShowMessage('Buff is not a Imade');
  Exit;
  end;
end;
кажется проблема теперь в
Код:
 Img2.Picture.Bitmap.Handle:=Clipboard.GetAsHandle(CF_bitmap);
поскольку когда я вызываю ее, то теряется 1 картинка, эта функция присваивает картинку, или делает какую-то ссылку на буфер?
__________
о как, 3, 4, 5 и тд уже нормально идут, т.е. портится только 1 картинка.
например я копирую из пейнта кусок 1. нажимаю кнопку, копирую кусок 2, нажимаю кнопку ... 3,4,5.
получу
белок место (за места куска 1), кусок 2, кусок 3,4,5 . проблема в куске 1

Последний раз редактировалось DLev2; 11.08.2013 в 15:24.
DLev2 вне форума Ответить с цитированием
Старый 11.08.2013, 15:37   #5
DLev2
Пользователь
 
Регистрация: 26.09.2009
Сообщений: 22
По умолчанию

проблему решил, не знаю почему копировалось так, но вот так работает отлично
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
    r1,r2: TRect;
    BSum: TBitmap;
begin
if Clipboard.HasFormat(CF_BITMAP) then
  begin
  RadioGroup1.Enabled:=False;
  BSum:= TBitmap.Create;
  Img2.Picture.Bitmap.Handle:=Clipboard.GetAsHandle(CF_bitmap);
  BSum.Width:= img1.Picture.Bitmap.Width+img2.Picture.Bitmap.Width;
  BSum.Height:= Max(img1.Picture.Bitmap.Height,img2.Picture.Bitmap.Height);
  r1 := Rect(0,0,img1.Picture.Bitmap.Width-1,img1.Picture.Bitmap.Height-1);
  BSum.Canvas.CopyRect(r1,img1.Picture.Bitmap.Canvas,r1);

  r1 := Rect(0,0,img2.Picture.Bitmap.Width-1,img2.Picture.Bitmap.Height-1);
  r2 := Rect(img1.Picture.Bitmap.Width,0,img1.Picture.Bitmap.Width+img2.Picture.Bitmap.Width-1,img2.Picture.Bitmap.Height-1);
  BSum.Canvas.CopyRect(r2,img2.Picture.Bitmap.Canvas,r1);
  img1.Picture.Bitmap.Assign(BSum);
  BSum.Free;
  end
else
  begin
  ShowMessage('Buff is not a Imade');
  Exit;
  end;
end;
DLev2 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Timage shelest Компоненты Delphi 1 26.05.2010 17:50
Timage Черничный Компоненты Delphi 10 04.07.2008 12:50
Timage RealSHELS Общие вопросы Delphi 7 05.05.2008 20:12
Timage RealSHELS Общие вопросы Delphi 2 03.05.2008 23:23