pic-to-ASCII оптимизировал в 14 раз

Kujivunia
  • Сразу начну с вопроса, а потом расскажу про историю:

     

    Кто поможет понять, почему в цикле на 144-182 строке программа ИНОГДА вылетает с ошибкой, которая связана с {$omp parallel for} ?  я же вроде убрал всё, что может конфликтовать, а остальное пометил как критическую секцию... https://gitlab.com/Roman.Svetlov/pic-to-acii/-/blob/master/main

     

    История: два года назад я подумал, что будет круто написать прогу, которая будет пропускать картинку через ascii фильтр. Из-за проблем со шрифтами и совместимостью я сделал вывод в виде картинки, а не настоящего ascii арта. Но прога работала медленно. Очень медленно. А вчера я наткнулся на неё, и изрядно оптимизировал. 

     

    Изрядно - это насколько? Скажем так, первая версия обрабатывала картинку 69 секунд + ~10? секунд первичной обработки. 

    Новая версия обрабатывает ту же самую картинку за 6 секунд полностью. В 13-14 раз быстрее. 

     

    Но есть один недостаток: таинственная ошибка из начала поста. Помогите. 

     

    Для тех, кто хочет пощупать прогу: 

    качаете по ссылке экзешник, картинку и текстовик, кладёте их в 1 папку, кидаете туда же свою картинку, запускаете прогу. 

    Настройки в текстовике:

    1. имя исходной картинки вместе с расширением

    2. имя картинки, которая создастся после обработки 

    3. Первая строка

    4. Последняя строка

    5. Первый столбец

    6. Последний столбец - это рамки прямоугольника ascii таблицы (в символах. Размер таблицы 0..15, 0..15 символов), из которого будут браться символы. По умолчанию используется вся таблица. 

     

    dota-2-dota-art-luna-moon.jpgJPGJMb9.png

    И Луна, но нарисованная только буквами своего имени

    THkUUHp.png

     

  • Автор темы

    Кажется, я нашёл ошибку.
    Итак, по порядку.


    DelphiВыделить код
    1 2 3 
    except     on E: Exception do       Print(E.InnerException.ToString + ' поднята ошибка, с сообщением : ' + E.Message);

    Нашёл этот код в интернете для Дельфи, но работает на Паскале. Не очень понимаю, как оно работает, что это за "on", но благодаря этому я получил более подробные сведения об ошибке. Ошибка возникала из-за одновременно вызова ut.GetHeight.
    Создал переменную

    PascalВыделить код
    1 
    var utHeight:= ut.Height

    Сделал замену по всему коду ut.Height на utHeight.
    и ошибки вроде пропали.

  • красавчик CoolNut.png

  • Автор темы
    ZipZap(D2) сказал(а):

    красавчик CoolNut.png

    Нажмите, чтобы раскрыть...

    Эт про найденную ошибку, или про прогу? 

     

    pdP1cvaNsbvczjQQW8d0SZImWYjNroduhQ6PUDozKSF921o5D6nzSYgHACPZOq6bMLxfGs_2QC6yyj3G9tFTNUukJ68

  • Kujivunia сказал(а):

    Эт про найденную ошибку, или про прогу? 

     

    pdP1cvaNsbvczjQQW8d0SZImWYjNroduhQ6PUDozKSF921o5D6nzSYgHACPZOq6bMLxfGs_2QC6yyj3G9tFTNUukJ68

    Нажмите, чтобы раскрыть...

    про прогу PepeSprint.gif?1592102756

  • ну че сказать, респект таким парнямCoolNut.png

  • Автор темы

    Браузер через этот фильтр выглядит как инопланетная голограмма-панель из голливудских фильмов

    1.png

Кто смотрит тему (Пользователи: 0, Гости: 0)