Конференция "Media" » Поворот Jpeg изображения [D7, WinXP]
 
  • Xmen (22.09.10 10:47) [0]
    Привет мастерам!!
    Есть форма в нем TImage в нем можно посмотреть jpeg файлы. есть такие файл в которых изображение неправильно лежит его нужно повернут 90 градусов влево или в право или на 180 градусов. Как можно это сделать правильно.
  • MBo © (22.09.10 11:44) [1]
    Стандартными средствами нетрудно сделать - перевести jpeg в битмап, который уже вывести с поворотом.

    Если будет задача перекодировать файлы без ухудшения качества - то гуглить lossless jpeg rotation 90.
    Сам не смотрел, не пробовал, но у этого хлопца есть поддержка поворотов на 90*k
    http://www.simdesign.nl/nativejpg.html
  • Дрон (22.09.10 13:21) [2]
    В метаданных иногда указывается угол, под которым правильно смотреть.
  • Xmen (22.09.10 13:38) [3]
    в инете поискал но увы работающего кода не нашел
  • Sapersky (22.09.10 14:22) [4]
    lossless jpeg rotation - см. pasjpeg.
    exif-тэг ориентации - вроде компонент называется TExif.
  • Xmen (24.09.10 08:10) [5]
    не получается
  • DiamondShark © (24.09.10 10:48) [6]

    > Xmen   (24.09.10 08:10) [5]
    > не получается

    Что именно не получается?
    Распаковать жпег или повернуть распакованный битмап?
  • DVM © (24.09.10 12:32) [7]
    IMHO распаковка и обратная паковка - это не дело. Есть же Orientation Tag. Там и не только ориентация, но и отражение. Какая разница, перевернуто само изображение или есть указания что его надо перевернуть. Все нормальные программы содержание этого тега учитывают. Никто не мешает учитывать и в своих программах.

    http://www.google.ru/search?source=ig&hl=ru&rlz=&q=exif+orientation&aq=f&aqi=g6g-s1g3&aql=&oq=&gs_rfai=
  • Sapersky (25.09.10 14:12) [8]
    Всё-таки тэг поддерживают не все программы. Встроенный вьюер XP не поддерживает, у Irfanview нужно включать в опциях (но мало кто знает о существовании этой настройки). Получается так, что если для себя - используй тэг, а если хочешь показать картинки ещё кому-то - прилагай в комплекте "правильный" вьюер...
    Lossless transform в этом смысле надёжнее.

    Хотя, у тэга есть ещё такое преимущество: фотоаппараты со встроенным датчиком ориентации (не самые дешёвые, мыльницы - от 8000 примерно) могут устанавливать правильный тэг автоматически.
  • Xmen (27.09.10 08:43) [9]
    Значит простого алгоритма для поворота изображения нет
    То что пишите по тегам и Lossless transform это выходит за рамки моих понимание.
  • DiamondShark © (27.09.10 13:05) [10]

    > Xmen   (27.09.10 08:43) [9]
    > Значит простого алгоритма для поворота изображения нет

    Алгоритмов для поворота -- полно. Алгоритм поворота распакованного изображения кратно 90 градусам -- прост до неприличия.

    Что уже ты пытался делать, и что конкретно не получилось?
  • Xmen (27.09.10 15:39) [11]
    Я хотел загрузит из базы в TImage Jpeg изображения.
    В изображениях хранится сканированный док файл. в некоторых случаях документы отсканированы боком. Чтобы почитать нормально нужно сделать поворот изображения. И еще некоторых изображение нужно уменьшит для просмотра.
  • antonn © (27.09.10 17:26) [12]
    тогда тут можно и сконвертить в обычный битмап
  • Nub (09.04.11 23:32) [13]
    Procedure rotateImage;
    var
     bm, bm1: TBitMap;
     x, y: integer;
     r, a: single;
     xo, yo: integer;
     s, c: extended;
    begin
     bm := TBitMap.Create;
     bm.LoadFromFile('222.bmp');
     xo := bm.Width div 2;
     yo := bm.Height div 2;
     bm1 := TBitMap.Create;
     bm1.Width := bm.Width;
     bm1.Height := bm.Height;
     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;
       Form1.Canvas.Draw(xo, yo, bm1);
       a := a + 0.05;
       Application.ProcessMessages;
     until Form1.Tag <> 0;
     bm.Destroy;
     bm1.Destroy;
    end;
  • snoudov © (10.09.13 08:32) [14]
    ALT+NUMPAD1 - Наклон против часовой стрелки
    _____________________
    http://opel.ctc-motors.ru/
 
Конференция "Media" » Поворот Jpeg изображения [D7, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0]