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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2012, 21:33   #1
CuTTeR
 
Регистрация: 29.05.2011
Сообщений: 5
По умолчанию Поворот, масштабирование, обрезание изображения.

Доброго времени суток!

Писал небольшую программу для редактирования изображений, начал с поворота, масштабирования, обрезания, но остановился на первых двух пунктах, столкнулся с проблемой. Как всегда где-то наляпал глупых ошибок. Надеюсь, поможете мне их обозначить.

С помощью TrackBar'ов выбираются значения.


событие onPaint:
Цитата:
Var Value, I : Integer;
begin
Value := (360 - TrackBar1.Position) Mod 360;
For I := 0 to 2 Do Begin
PntArray[I].X := CenterX + Round(+OrgPntArray[I].X * SinCosArray[mCos][Value] + OrgPntArray[I].Y * SinCosArray[mSin][Value]);
PntArray[I].Y := CenterY + Round(-OrgPntArray[I].X * SinCosArray[mSin][Value] + OrgPntArray[I].Y * SinCosArray[mCos][Value]);
End;
PlgBlt(pb_Display.Canvas.Handle, PntArray, BMP2.Canvas.Handle, 0, 0, BMP.Width, BMP.Height, 0, 0, 0);

////
BMP2.Width := BMP.Width + (TrackBar3.Position-1) * 2;
BMP2.Height := BMP.Height + (TrackBar3.Position-1) * 2;
BMP2.Canvas.StretchDraw(Rect(0,0, BMP2.Width, BMP2.Height),BMP);
pb_Display.Canvas.CopyRect(pb_Displ ay.ClientRect, BMP.Canvas,pb_Display.ClientRect);
////

end;
Симптомы: исходное изображение дублируется в левом верхнем углу, трансформируемое изображение при увеличении не изменяет размеры(увеличивается, но выхдящие за размер исходного изображения обрезаются.

И пока не придумал как обрезать, будут идеи - с удовольствием послушаю.
CuTTeR вне форума Ответить с цитированием
Старый 11.08.2012, 13:31   #2
CuTTeR
 
Регистрация: 29.05.2011
Сообщений: 5
По умолчанию

Хоть какие-то соображения есть?
CuTTeR вне форума Ответить с цитированием
Старый 11.08.2012, 14:55   #3
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Пользуйтесь поиском.
http://www.programmersforum.ru/showt...F2%E8%ED%EA%E8
http://www.programmersforum.ru/showthread.php?t=27981
Kix.IV вне форума Ответить с цитированием
Старый 11.08.2012, 17:05   #4
CuTTeR
 
Регистрация: 29.05.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
И к чему было это сообщение? Тема была не про другие алгоритмы и их реализацию, а про данный алгоритм и устранение ошибки в ЭТОМ алгоритме.
CuTTeR вне форума Ответить с цитированием
Старый 11.08.2012, 17:22   #5
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

К тому, что не зачем создавать велосипед. Есть алгоритмы которые точно работают и оптимизированы. Хотя это твой выбор.
Kix.IV вне форума Ответить с цитированием
Старый 11.08.2012, 17:24   #6
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

И вообще, использовать в onPaint канву это как-то коряво, имхо.
Kix.IV вне форума Ответить с цитированием
Старый 11.08.2012, 18:25   #7
CuTTeR
 
Регистрация: 29.05.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
К тому, что не зачем создавать велосипед. Есть алгоритмы которые точно работают и оптимизированы. Хотя это твой выбор.
Ну вот такой я любитель велосипедов

Цитата:
И вообще, использовать в onPaint канву это как-то коряво, имхо.
Возможно.
Вот http://www.programmersforum.ru/showt...F2%E8%ED%EA%E8 медленный, http://www.programmersforum.ru/showthread.php?t=27981 попробую. А по каким алгоритмам тогда масштабировать и обрезать? менять так все.))
CuTTeR вне форума Ответить с цитированием
Старый 11.08.2012, 18:47   #8
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Воспользуйся великой вещью, Поиском!
А что ты понимаешь под масштабированием?
Kix.IV вне форума Ответить с цитированием
Старый 11.08.2012, 23:15   #9
CuTTeR
 
Регистрация: 29.05.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
Воспользуйся великой вещью, Поиском!
А что ты понимаешь под масштабированием?
Я ожидал большего...
Поиском я бы мог и без темы вочпользоваться, как собственно и сделал, если интересно. Изначальной проблемой, по которой была создана тема, была ошибка, которую я просил помочд найти, потом я спросил мнения и совета, что меня интересует и сейчас.
Под масштабированием я понимаю изменение масштаба.
CuTTeR вне форума Ответить с цитированием
Старый 12.08.2012, 17:48   #10
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

У меня есть какой-то код. Вот:
Код:
HH := Image1.Height / Height;
  WW := Image1.Width / Width;
  if (HH > WW) then
  begin
    Image1.Height := trunc(Image1.Height / HH);
    Image1.Width := trunc(Image1.Width / HH);
    Image1.Stretch := True;
    //ShowMessage('По высоте');
  end
  else
  begin
    Image1.Height := trunc(Image1.Height / WW);
    Image1.Width := trunc(Image1.Width / WW);
    Image1.Stretch := True;
    //ShowMessage('По ширине');
  end;
Надо подключить jpeg. Кажись это медленный метод.
Kix.IV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
Масштабирование большого изображения BleStaR Общие вопросы по Java, Java SE, Kotlin 1 29.05.2011 17:22
Обрезание изображения russian-stalker HTML и CSS 3 26.02.2011 07:53
Масштабирование и поворот графического объекта haros Паскаль, Turbo Pascal, PascalABC.NET 3 02.03.2009 15:24
масштабирование изображения Alex_Pro Общие вопросы .NET 0 25.05.2008 09:09