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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2007, 14:26   #1
John_chek
Форумчанин
 
Аватар для John_chek
 
Регистрация: 24.01.2007
Сообщений: 108
По умолчанию Как перевернуть изображение по часовой стрелке

Здравствуйте! Есть такая задача: в определенную папку скидываются фотографии удостоверений сотрудников УВД, сфотографированны он по разному(т.е.е в одном случае фотоаппарат держат по ширине, в другом по высоте). Нужно что-то придумать, чтобы можно было хотябы перевернуть их все по ширине. Единственный признак для этого является то, что всегда высота меньше ширины(в пикселях)! Ну если кто понял о чем я помогите плиз!???
Соответственно это нужно делать автоматически, чтобы прога смотрела, если высота > ширины, тогда повернуть по часовой стрелке.

Последний раз редактировалось John_chek; 06.07.2007 в 14:30.
John_chek вне форума Ответить с цитированием
Старый 06.07.2007, 16:02   #2
itisiam
аккаунт недоступен
Форумчанин
 
Регистрация: 23.01.2007
Сообщений: 107
По умолчанию

я знаю как перевернуть, а вот в новый файл сохранять не пробовал, хотя не сложно вроде.
1.формат BMP или какой там?
2.надо уже имеющиеся изменять или новые формировать (перевернутые)
ввел пароль, который мне не известен
itisiam вне форума Ответить с цитированием
Старый 07.07.2007, 11:53   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Повернуть на 90° не сложно. Считываешь пиксели из одного битмапа по горизонтали и заполняшь другой по вертикали. Сохранить в файл есть метод SaveToFile. Если исходный формат Jpeg то перед поворотом его нужно преобразовать в bmp, метод Assign. Хотя может и не надо, мы же пиксели только считывать будем. Битмап с уже повернутым изображением, чтобы сохранить в jpeg сначала тем же Assign конвертируем в Jpeg Затем сохраняем SaveToFile.

Кода здесь не много, но он зависит от исходного формата и действий с файлами (заменять не заменять), поэтому не пишу.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 07.07.2007, 16:56   #4
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

дано Tbitmap, поверните ..
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 07.07.2007, 18:38   #5
konkurent
Пользователь
 
Регистрация: 10.04.2007
Сообщений: 51
По умолчанию

гм....а в чём возникает проблема?
e-mail=konkurent@gala.net
isq=498425545
konkurent вне форума Ответить с цитированием
Старый 07.07.2007, 20:02   #6
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

в эффективном повороте .. и на любое целое число градусов
(расширяем задачу)

конкурс, если хотите
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 07.07.2007, 20:31   #7
konkurent
Пользователь
 
Регистрация: 10.04.2007
Сообщений: 51
По умолчанию

ну если уж конкурс, тогда где призовой фонд?
бум поворачивать ;-)
e-mail=konkurent@gala.net
isq=498425545
konkurent вне форума Ответить с цитированием
Старый 09.07.2007, 00:24   #8
Sergey_nl
Пользователь
 
Регистрация: 02.07.2007
Сообщений: 23
По умолчанию

Пример кода, поворачивающего изображение на произвольный угол:
Код:
procedure TForm1.Button5Click(Sender: TObject);
var
  bm, bm1: TBitMap;
  x, y: integer;
  r, a: single;
  xo, yo: integer;
  s, c: extended;
begin
  bm := TBitMap.Create;
  bm.LoadFromFile('test.bmp');
  xo := bm.Width div 2;
  yo := bm.Height div 2;
  bm1 := TBitMap.Create;
  bm1.Width := bm.Width;
  bm1.Height := bm.Height;
  Image1.Canvas.Draw(xo, yo, bm1);
  a := 0;
  repeat
    for y := 0 to bm.Height - 1 do begin
      for x := 0 to bm.Width - 1 do begin
        r := sqrt(sqr(x - xo) + sqr(y - yo));
        SinCos(a + arctan2((y - yo), (x - xo)), s, c);
        bm1.Canvas.Pixels[x,y] := bm.Canvas.Pixels[
          round(xo + r * c), round(yo + r * s)];
      end;
      Application.ProcessMessages;
    end;
    Image1.Canvas.Draw(xo, yo, bm1);
    a := a + 0.05;
    Application.ProcessMessages;
  until Form1.Tag <> 0;
  bm.Destroy;
  bm1.Destroy;
end;
Взято отсюда:
http://delphi-faq.zoxt.net/517.htm
Проекты для лучших программистов http://www.netlancer.ru
Sergey_nl вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удвоить каждый символ строки, потом перевернуть строку Didi Помощь студентам 6 20.05.2008 15:33
БД в Delphi7 +Изображение _NATASHENKA_ Помощь студентам 3 15.04.2008 08:31
Изображение Terran Работа с сетью в Delphi 2 08.02.2008 22:28
Замостить изображение SunKnight Общие вопросы Delphi 5 13.01.2008 14:23
Изображение Artem Мультимедиа в Delphi 10 13.07.2007 13:27