1. Pascal / Говнокод #22395

    −13

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    procedure TForm1.btn1Click(Sender: TObject);
    
    var
      s, i: Byte;
      prg: Byte;
      fs: Tfilestream; JPEG: TJPEGImage;  Bitmap: TBitmap;  oldindex: Byte;
      iCounterPerSec: TLargeInteger;  
      C1, C2: TLargeInteger;
    label
      ss;
    begin
    
      pb1.Position := 0;
      ComboBox1.Enabled := False;
      DateTimePicker2.Enabled := False;
      DateTimePicker1.Enabled := False;
      Button3.Enabled := False;
      Button1.Enabled := False;
      SpeedButton1.Enabled := False;
      chk1.Enabled := False;
      chk2.Enabled := False;
      btn1.Enabled := False;
      txt := 'Подготовка отчёта, подождите... ~ ?';
      oldindex := ComboBox1.ItemIndex;
    
      for i := 0 to ComboBox1.Items.Count do
      begin
        QueryPerformanceFrequency(iCounterPerSec);
        QueryPerformanceCounter(C1);
        ComboBox1.ItemIndex := i;
        Button1.Click;
        inc(prg);
        pb1.Position := prg;
        if AnsiRightStr(Combobox1.Text, 6) <> 'стакан' then
        begin
          Chart1.SaveToBitmapFile(Path + 'Report\~temp.tmp');
          JPEG := TJPEGImage.Create;
          Bitmap := TBitmap.Create;
    
          try
            Bitmap.LoadFromFile(path + 'Report\~temp.tmp');
            Bitmap.Canvas.LineTo(0, 0);
            Bitmap.Canvas.Font.Name := 'Courier New';
            Bitmap.Canvas.Font.Size := 10;
            Bitmap.Canvas.TextOut(25, 5, '  Дата и время выдачи: ' + datetostr(date)
              + ' ' + timetostr(time) + ' |');
            JPEG.Assign(Bitmap);
            JPEG.CompressionQuality := 85;
            JPEG.Compress;
            Image1.Picture.Assign(JPEG);
    
          finally
            JPEG.Free;
            Bitmap.Free;
          end;
          DeleteFile(path + 'Report\~temp.tmp');
        end;
    
        if AnsiRightStr(Combobox1.Text, 6) <> 'стакан' then
          Image1.Picture.SaveToFile(path + 'Report\' + Combobox1.Text + '.jpg');
        Application.HandleMessage;
        if i > 0 then
          goto ss;
        QueryPerformanceCounter(C2);
        txt := 'Подготовка отчёта, подождите... ~ ' +
          IntToStr(strtoint(FormatFloat('0', (C2 - C1) / iCounterPerSec)) * 60 div
            60)
          + ' мин';
        ss:
        pb1.Visible := True;
      end;
      prg := 0;
      ComboBox1.ItemIndex := oldindex;
      Button1.Click;
      ComboBox1.Enabled := True;
      DateTimePicker2.Enabled := True;
      DateTimePicker1.Enabled := True;
      Button3.Enabled := True;
      Button1.Enabled := True;
      SpeedButton1.Enabled := True;
      chk1.Enabled := True;
      chk2.Enabled := True;
      btn1.Enabled := True;
      txt := 'Построение графика...';
    end;

    Программа просмотра архива температурных датчиков. Работает неплохо, со своими обязанностями справляется.
    Полный исходный код проекта с откомпилированным екзешником и базой можно взять здесь: https://yadi.sk/d/lM7TrPJ33EFeDJ

    Запостил: 65536bytesfree, 19 Февраля 2017

    Комментарии (22) RSS

    • Строки 38..57 - банальное чесание головы, через анус, дальше и смотреть не стал.
      Въебал посту плюс.
      Ответить
    • Ууууу! Паскалябра!
      Ответить
    • > Image1.Picture.Assign(JPEG);
      Зожимать рисунок только ради того, чтобы Image1 заново его розжал... Прогревают воздух, чтобы температурные датчики точнее работали.
      Ответить
      • Не только для этого, еще чтобы вывести на экран уже деформированный джипегом а не исходный вариант.
        Ответить
        • Что-то слабенько: качество выставлено в 85. Нужно поставить какое-нибудь число меньше 30, да ещё и повторить несколько раз.
          Ответить
          • А что, от перезожатий картинка меняется? Даже с теми же настройками?

            Это же вореционные мультики так можно сделать. Хотя, с этим неплохо справляются нейросети http://joyreactor.cc/post/2505036
            Ответить
            • Кляті мескалін!

              Если зожимать в lossless-формат (PNG), то от перезожатий ничего не изменится. А JPEG — формат с потерями: разложение в ряд Фурье с потерей высших гармоник. Резкие переходы при обратном преобразовании будут давать всплеск, который после нескольких преобразований растечётся.
              Ответить
              • Там не фурье, а DCT. После которого стоит деление (квантизация), которое и ест эти самые гармоники. А всё остальное - обратимо. Т.е. преобразования с одинаковыми настройками просто туда-сюда будут числа гонять. А погрешность съест квантизация. Проверь.
                Ответить
                • А как в формулу входит Quality? Мне сейчас лень читать.
                  Ответить
                  • По нему строится та самая табличка с коэффициентами квантизации, на которые при зожатии делят гармоники (а при розжатии - умножают).
                    Ответить
              • Проверил. Картинка таки таки меняется. Только после 5 итераций (quality 80) сошлось. RMSE по нормализованным в 0..1 картинкам:
                0.22183%
                0.00602%
                0.00378%
                0.00263%
                0.00172%
                0
                Ответить
                • З.Ы. Если посмотреть по отклонениям:
                  1 итерация: 597679 пикселей из 2073600 помято, из них 19818 помято сильнее, чем на 2, один даже на 10
                  2 итерация: 429 помято, из них всего 20 на 2
                  3 итерация: 169 помято, 8 на 2
                  4 итерация: 40 помято 5 на 2
                  5 итерация: 40 помято на 1
                  6 итерация: идеал

                  Т.е. всё-таки погрешность DCT немного трясёт рисунок. Ничтожно по сравнению с первым зожатием, но трясёт.
                  Ответить
                • Теперь построй график скорости сходимости от quality.
                  Ответить
                  • Сибирский учёный открыл секрет вореонов
                    Необычное открытие в области вореционной анимации сделал широко известный в узких кругах сибирский учёный доктор физико-математических наук профессор Борманд. Совершив шесть итереций зожатия кобенных рядов методом дискретативной осцилляции растра волнами Фурье, учёный обнаружил устойчивость выходных данных в седьмом знаке после запятой. Сделанное им открытие потрясло мировых учёных с передовым именем из Института Вореонных Исследований СО РАН, а также открыло новые пути в недетской генереционной мультипликации. Исследователем на основе обработки кобениарда случайных JPEG-сэмплов из базы NASA был построен график скорости сходимости результатов Фурье-вореирования удельного дельта-изображения. С профессором Бормандом сотрудничают лучшие умы из MIT и МГУ, готовится 30 публикаций в разных областях науки от психологии сенсорного восприятия фурьеций до физики высокоэнергетичных планковских вореонов.
                    Ответить
                    • Профессор Кегдан утверждает, что все это кобеционная хуита
                      Ответить
                  • Да так то оно сходится уже после первой. На остальных только погрешность в младших разрядах утрясается.
                    Ответить
                    • Это при quality=80. А при низких значениях?
                      Ответить
                      • Ну при 20 всего две итерации понадобилось. Результат третьей уже совпал со второй. Что логично - квантование более суровое.
                        Ответить
            • Кстати, почему-то заглох вореционный Рамзанчик:
              https://twitter.com/neuromzan
              Ответить
            • > вореционные мультики

              Когда-то я делал лабу по обработке изображений и накосячил с одним фильтром - он немного зашумлял границы на изображении. Вот результат многократного применения этого косячного фильтра к одному изображению, который я специального откопал ради этого комента: http://imgur.com/a/5zZUJ
              Ответить

    Добавить комментарий