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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 22:30   #1
kirsan007
Пользователь
 
Аватар для kirsan007
 
Регистрация: 24.02.2011
Сообщений: 28
Восклицание Timage + Canvas = увеличение (как?)

В общем нужно растянуть картинку без искажения, то есть разрезать посередине, отрезанную часть сдвинуть на указанное число пикселей и заполнить разрез шаблоном, взятым из вертикальной полоски в 1 пиксель слева (допустим) от места разреза. Потом то же самое сделать по горизонтали.

Удалось пока удлинить лишь по горизонтали благодаря одной из тем данного форума.

Код:
 z:=100;
 w:=98;
 r1:=Bounds(0,0,w,image1.Height);
 r2:=Bounds(w,0,w,image1.Height);
 //***********************************************************
 image1.Width:=image1.Width+z;
 b2:=TBitMap.Create;
 b2.Width:=image1.Width;
 b2.Height:=image1.Height;
 b2.Canvas.CopyRect(r1,image1.Picture.Bitmap.Canvas,r1);
 r1:=Bounds(w+z,0,w,b2.Height);
 b2.Canvas.CopyRect(r1,image1.Picture.Bitmap.Canvas,r2);
 for i:= w to w+z do
  begin
   r1:=Bounds(i-1,0,1,b2.Height);
   r2:=Bounds(i,0,1,b2.Height);
   b2.Canvas.CopyRect(r2,b2.Canvas,r1);
  end;
 image1.Picture.Assign(b2);
 memo1.Lines.Add(IntToStr(image1.Width));
 b2.Free;
Отаку

Последний раз редактировалось kirsan007; 06.04.2011 в 17:40.
kirsan007 вне форума Ответить с цитированием
Старый 06.04.2011, 00:14   #2
kirsan007
Пользователь
 
Аватар для kirsan007
 
Регистрация: 24.02.2011
Сообщений: 28
По умолчанию

ап... =(((
Отаку
kirsan007 вне форума Ответить с цитированием
Старый 06.04.2011, 00:45   #3
kirsan007
Пользователь
 
Аватар для kirsan007
 
Регистрация: 24.02.2011
Сообщений: 28
По умолчанию

Начал писать увеличение по высоте...
Код:
 r1:=Bounds(0,0,image1.Width,21);
 r2:=Bounds(0,21,image1.Width,image1.Height);
 //***********************************************************
 image1.Height:=image1.Height+1;
 b2:=TBitMap.Create;
 b2.Width:=image1.Width;
 b2.Height:=image1.Height;
 b2.Canvas.CopyRect(r1,image1.Picture.Bitmap.Canvas,r1);
 r1:=Bounds(0,21+1,b2.Width,b2.Height);
 b2.Canvas.CopyRect(r1,image1.Picture.Bitmap.Canvas,r2);
 for i:= 1 to 1 do
  begin
   r1:=Bounds(0,22,b2.Width,23);
   r2:=Bounds(0,21,b2.Width,22);
   b2.Canvas.CopyRect(r2,b2.Canvas,r1);
  end;
 image1.Picture.Assign(b2);
 memo1.Lines.Add(IntToStr(image1.Height));
 b2.Free;
Работает только при увеличении на 1 пиксель. Подправьте если не сложно.. Впервые с канвасом работаю.
Отаку
kirsan007 вне форума Ответить с цитированием
Старый 06.04.2011, 10:09   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

посмотри canvas.stretchdraw, правда не понимаю , что тебе нужно, но эта команда рисует растянутое изображние, сама программно сжимая-разжимая.

советую ещё просто проверить математику графопостроений на листочке, мб где-то не видишь очевидного ?

твой код кристалльно непрозрачен (( хоть бы проект прикрепил... пс. хотя может это просто лень из-за осознания сколько надо времени на въезжание в код
phomm вне форума Ответить с цитированием
Старый 06.04.2011, 17:39   #5
kirsan007
Пользователь
 
Аватар для kirsan007
 
Регистрация: 24.02.2011
Сообщений: 28
По умолчанию

В общем написал я нужный код.

Выкладывать не буду ибо стыдно, да и сделан под меня.


Тему можно закрыть, всем спасибо.
Отаку
kirsan007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TImage слои само масштабировало в зависимости от количества слоёв через Canvas если получится radiokarazinec Общие вопросы Delphi 1 21.12.2010 06:10
При изменении размеров Timage canvas не увеличивается BloodMaX Общие вопросы Delphi 1 15.04.2010 12:28
Проблема с рисованием на canvas`e Timage (Delphi) Dalagardi Помощь студентам 9 25.03.2010 20:55
Как очистить Canvas? beegl Общие вопросы Delphi 4 30.05.2008 02:51
Как очистить Canvas? Pro_BerSerK Общие вопросы Delphi 9 30.01.2008 16:03