OpenToonz: рдЕрдВрджрд░ рдФрд░ рдмрд╛рд╣рд░

image1.png

рд▓рдЧрднрдЧ рдЪрд╛рд░ рд╕рд╛рд▓ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ рдЬрдм рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреЗ рдУрдкрдирдЯреНрдпреВрди рд╕реНрд░реЛрдд рдХреЛрдб рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИред рдЕрдВрддрд┐рдо рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж рд╕реЗ, рдЙрдирдХреА рдорджрдж рд╕реЗ рдореИрд░реА рдФрд░ рдж рд╡рд┐рдЪ рдлреНрд▓рд╛рд╡рд░, рдмреИрдЯрдореИрди рдирд┐рдВрдЬрд╛, рдкреНрд░реЛрдорд╛рд░реЗ рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ рдПрдирд┐рдореЗрдЯреЗрдб рдХрд╛рдо рдХрд┐рдП рдЧрдП рдереЗред рдЪреВрдВрдХрд┐ рдмрдбрд╝реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ Toonz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?

рдЖрдк " рдЯреВрдирдЬрд╝ рдХреЗ 2 рдбреА рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЦрд░рд╛рдм рдХреЛрдб " рд▓реЗрдЦ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдордЧреНрд░ рдкреНрд░рднрд╛рд╡ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЧрдИрдВред рд╣рдо рдЙрди рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЪреАрдЬреЗрдВ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рдХреНрд░рд┐рдп рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреЛрдб рдХреЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рдпреБрдХреНрдд рднрд╛рдЧреЛрдВ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдЙрдиреНрд╣реЗрдВ рдЖрд╡реЗрджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рддрдп рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмреЗрдорд╛рдиреА рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЕрд░реНрде рдкреБрд░рд╛рдиреА рдФрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИред рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдХрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рддреБрд░рдВрдд рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдордп рдФрд░ рдХрдВрдкрдиреА рдХреЗ рдкреИрд╕реЗ рджреЛрдиреЛрдВ рдмрдЪрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рдж рдХреА рдзрд╛рд░рдгрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛,рдХрд┐ рдПрдХ рдХрд╛рдо рдпрд╛ рджреВрд╕рд░рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдШрд░реНрд╖рдг N1

V610 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ред рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ '<<' рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб '(- 1)' рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред

decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
{
  int p1, m1;
  p1 = 1 << cinfo->Al;    
  m1 = (-1) << cinfo->Al; 
  ....
}

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИред рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдорд╛рдирдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ:

1. рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкрджреЛрдиреНрдирдд рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ рдпрджрд┐ рд╕рд╣реА рдСрдкрд░реЗрдВрдб рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рдпрд╛ рдкрджреЛрдиреНрдирдд рдХрд┐рдП рдЧрдП рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдХреЗ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд▓рдВрдмрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

2. E1 рдХрд╛ рдорд╛рди << E2 E1 рдмрд╛рдПрдВ-рд╢рд┐рдлреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ E2 рд╕рд╛ рд╕реНрдерд╛рди рд╣реИ; рдЦрд╛рд▓реА рдмрд┐рдЯреНрд╕ рд╢реВрдиреНрдп рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВред рдпрджрд┐ E1 рдореЗрдВ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдорд╛рди E1 * 2 ^ E2 рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рдорд╛рди рд╕реЗ рдПрдХ рд╕реЗ рдХрдо moduloред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ E1 рдореЗрдВ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдФрд░ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд╣реИ, рдФрд░ E1 * 2 ^ E2 рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдпрд╣ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рд╣реИ; рдЕрдиреНрдпрдерд╛, рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

рддреЛ, рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рджрд╛рдПрдВ рдпрд╛ рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд╣реИред рдпрджрд┐ рдСрдкрд░реЗрдВрдб рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░, рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рдХрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдПрди 2

рд╡реА 517'If (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ if (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 156, 160. рдХреИрдорд░реИрдкреНрдЯреЗрдкреНрд▓реЗрд░рд╡реЗрд▓рдХрдВрдЯреНрд░реЛрд▓ред рдкреАрдкреА 156

void CameraCaptureLevelHistogram::mousePressEvent(QMouseEvent* event) {
  if (event->button() != Qt::LeftButton) return;
  if (m_currentItem == Histogram) {
    m_histogramCue = true;
    return;
  }
  if (m_currentItem == None) return;
  QPoint pos = event->pos();
  if (m_currentItem == BlackSlider)  // <=
    m_offset = pos.x() - SIDE_MARGIN - m_black;
  else if (m_currentItem == GammaSlider)
    m_offset = pos.x() - SIDE_MARGIN - gammaToHPos(m_gamma, m_black, m_white);
  else if (m_currentItem == BlackSlider)  // <=
    m_offset = pos.x() - SIDE_MARGIN - m_white;
  else if (m_currentItem == ThresholdSlider)
    m_offset = pos.x() - SIDE_MARGIN - m_threshold;
}

рдпрд╣рд╛рдБ рдЪрд░ m_offset рдХреЛ m_currentItem рдХреЗ рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рди рджрд┐рдП рдЧрдП рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, BlackSlider рдкрд░ рдЪреЗрдХ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╡реНрдпрд░реНрде рд╣реИ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╢рд░реАрд░ рд╕реЗ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ m_white рдЪрд░ рдЧрдгрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ ред рдЖрдЗрдП m_currentItem рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди рджреЗрдЦреЗрдВ ред

  LevelControlItem m_currentItem;

  enum LevelControlItem {
    None = 0,
    BlackSlider,
    WhiteSlider,
    GammaSlider,
    ThresholdSlider,
    Histogram,
    NumItems
  };

image3.png

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрд▓рд╛рдЗрдбрд░ рдореВрд▓реНрдп рднреА рд╕рдВрднрд╡ рд╣реИ , рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдЕрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдп рдЦреЛ рдЧрдП рдереЗред

Fragment N3

V517 'if (A) {...} рдХрд╛ рдЙрдкрдпреЛрдЧ if (A) {...}' рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 784, 867. tpalette.cpp 784

void TPalette::loadData(TIStream &is) {
  ....
  std::string tagName;
  while (is.openChild(tagName)) {
    if (tagName == "version") {
      ....
    } else if (tagName == "stylepages") { // <=
      while (!is.eos()) {
        if (....){
          ....
        }
        ....
        is.closeChild();
        }
    } else if (tagName == "refImgPath") {
      ....
    } else if (tagName == "animation") {
      ....
    } else if (tagName == "stylepages") { // <=
      int key = '0';
      while (!is.eos()) {
        int styleId = 0;
        ....
      }
    } 
      ....
  }
}

рдПрдХ рдФрд░ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ред рдпрд╣рд╛рдВ, рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рдХрд╛рдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯреИрдЧрдирд╛рдо рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рдЕрдм рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдмрд╕ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдЫреВрдЯ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Fragment N4

V547 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'chancount == 2' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред psd.cpp 720

void TPSDReader::readImageData(...., int chancount) {
  ....
  if (depth == 1 && chancount == 1) { // <= 1
    ....
  } else if (depth == 8 && chancount > 1) {
    ....
    for (....) {
      if (chancount >= 3) {
        ....
        if (chancount == 4)  
          ....
        else
          ....
      } else if (chancount <= 2)  // <= 2
      {
        ....
        if (chancount == 2) // <= 3
          ....
        else
          ....
      }
      ....
    }
    ....
  } else if (m_headerInfo.depth == 8 && chancount == 1) {
  ....
}

рдЗрди рдЪреЗрдХреЛрдВ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдирдВрдмрд░ рдПрдХ рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдЪрд╛рдВрд╕рд╛рдЙрдВрдЯ рдХреА рддреБрд▓рдирд╛ 1 рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИ , рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕рдВрдЦреНрдпрд╛ 2 рдореЗрдВ, рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░ 2 рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИред рдирддреАрдЬрддрди, рдирдВрдмрд░ 3 рдХреЗ рддрд╣рдд рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рдВрднрд╡ рдЪрд╛рдВрд╕рд╛рдЙрдВрдЯ рдорд╛рди 2 рд╣реИ ред рдпрд╣ рддреНрд░реБрдЯрд┐ рдЧрд▓рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд┐рд░ рдФрд░-рд╢рд╛рдЦрд╛ рдХреНрдпреЛрдВ ...

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди 300 рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдХреЛрдб рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЫреЛрд░реЛрдВ рдХреЗ рдвреЗрд░ рд╣реЛрддреЗ рд╣реИрдВред

image4.png

Fragment N5

V614 Uninitialized рд╡реИрд░рд┐рдПрдмрд▓ 'precSegmentIndex' рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред 'InsertBoxCorners' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рдВрдЪрд╡реЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред rasterselection.cpp 803

TStroke getIntersectedStroke(TStroke &stroke, TRectD bbox) {
  ....
  int precSegmentIndex, currentSegmentIndex, startSegmentIndex,
      precChunkIndex = -1;
  ....
  if (....) {
    insertBoxCorners(bbox, points, outPoints, currentSegmentIndex,
                     precSegmentIndex);
    ....
  }
}

void insertBoxCorners(...., int currentSegmentIndex, int precSegmentIndex) {
  ....
  bool sameIndex = (precSegmentIndex == currentSegmentIndex);
  ....
  int segmentIndex = precSegmentIndex;
  ....
}

рд╢рд╛рдпрдж, рдПрдХ рдЧрд▓рддреА рдпрд╣рд╛рдБ рднреА рдЪрд░ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ precSegmentIndex , currentSegmentIndex , startSegmentIndex , precChunkIndex ред рдбреЗрд╡рд▓рдкрд░ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рддрддреНрд╡ -1 рдХрд╛ рдЖрд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдЙрд╕реА рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рдЪрд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред

рд╡рд┐рдЦрдВрдбрди N6

V590 's! = "" && s == "рд░рдВрдЧ" "рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрддреНрдпрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рдЧрд▓рдд рдЪрд┐рддреНрд░рдг рд╣реИред cleanupparameters.cpp 416

void CleanupParameters::loadData(TIStream &is, bool globalParams) {
  ....
  std::string s = is.getTagAttribute("sharpness");
  ....
  if (....)
  {
    ....
  } else if (tagName == "lineProcessing")
    ....
    if (s != "" && isDouble(s)) 
      ....
    if (s != "" && isDouble(s))
      ....
    if (s != "" && s == "color") // <=
      ....
  } else if (tagName == "despeckling") {
    ....  
  }
  ....
}

рдпрд╣ рдЧрд▓рддреА, рдмрд▓реНрдХрд┐ рдПрдХ рджреЛрд╖ рд╣реИ, рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддреБрд▓рдирд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо рдХреЛрдб рдХреЛ рд╕рдордЧреНрд░ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрддрд┐рд░рд┐рдХреНрдд рддреБрд▓рдирд╛ рджрд┐рдЦрд╛рдИ рджреАред

image5.png

рдРрд╕реЗ рдиреВрдбрд▓реНрд╕, рдЬреЛ рдХреЛрдб рдХреЗ рджрд░реНрдЬрдиреЛрдВ рдпрд╛ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреЛрдИ рдЕрдиреНрдп рддрд░реНрдХ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд╕рд╛рде рдЙрдирдХреА рдЦреЛрдЬ рдкреАрдбрд╝рд╛ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИред

Fragment N7

V772 рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП 'рдбрд┐рд▓реАрдЯ' рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред pluginhost.cpp 1327

static void release_interface(void *interf) {
  if (interf) delete interf;
}

рдпрд╣рд╛рдВ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд╕рдВрджреЗрд╢ рд╕реНрд╡рдпрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рд╣реИ: рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдкрд░ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рддреЛ рдпрд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

template<class T>
static void release_interface(T *interf) {
  if (interf) delete interf;
}

Fragment N8

V568 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ 'sizeof ()' рдСрдкрд░реЗрдЯрд░ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 'm_xshHandle' рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВред tstageobjectcmd.cpp 455

class DVAPI TStageObjectParams {
  ....
};

class RemovePegbarNodeUndo final : public TUndo {
  ....
  TXsheetHandle *m_xshHandle;

public:
  int getSize() const override {
    return sizeof *this + sizeof(TStageObjectParams) + sizeof(m_xshHandle);
  }
  ....
}

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░реНрдпрд╛рдкреНрдд рдЧрд▓рддреА рдЬреЛ рдЕрдЬреНрдЮрд╛рдирддрд╛ рдФрд░ рдЕрдЬреНрдЮрд╛рди рджреЛрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдБ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдорд╛рдорд▓рд╛ рдЕрд╕рд╛рд╡рдзрд╛рди рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХрд╛рд▓ рдореЗрдВ рдпрд╣ рдлрд┐рд░ рднреА рд╕реНрдердЧрд┐рдд рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдбрд┐рд░реЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рд╣рдо рдХреЗрд╡рд▓ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

return sizeof *this + sizeof(TStageObjectParams) + sizeof(*m_xshHandle);

Fragment N9

V568 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ 'sizeof ()' рдСрдкрд░реЗрдЯрд░ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 'рдЗрд╕' рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдирд╣реАрдВред shaderfx.cpp 107

struct RectF {
  GLfloat m_val[4];
  ....
  bool operator==(const RectF &rect) const {
    return (memcmp(m_val, rect.m_val, sizeof(this)) == 0);
  }
};

рдФрд░ рдпрд╣рд╛рдБ, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡реЗ рдЗрд╕ рд╕реВрдЪрдХ рдХреЛ рд░реЛрдХрдирд╛ рднреВрд▓ рдЧрдП ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрдЪрдХ рдХрд╛ рдЖрдХрд╛рд░ред рдирддреАрдЬрддрди, рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ 4 рдпрд╛ 8 рдмрд╛рдЗрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ (рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛рдИ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред рдХреЛрдб рдХрд╛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг:

return (memcmp(m_val, rect.m_val, sizeof(*this)) == 0);

Fragment N10

V554 unique_ptr рдХрд╛ рдЧрд▓рдд рдЙрдкрдпреЛрдЧред 'рдирдИ []' рдХреЗ рд╕рд╛рде рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЛ 'рдбрд┐рд▓реАрдЯ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░рдореЗрдХрд░.рдХреЙрдк 29

void makeScreenSaver(TFilePath scrFn, TFilePath swfFn,
                     std::string screenSaverName) {
  struct _stat results;
....
  int swfSize = results.st_size;
  std::unique_ptr<char> swf(new char[swfSize]);
....
}

рдпрд╣ рдЕрдХреНрд╕рд░ рднреБрд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрдиреВрдареЗ_рдкрд╛рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрддреНрдХрд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдЯрд╛рдирд╛ рдпрд╛ рд╣рдЯрд╛рдирд╛ [] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдЖрдк рд╕реВрдЪрдХ рдХреЛ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдирдП [] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рд▓реАрдЬ рдбрд┐рд▓реАрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реВрдЪрдХ рдкреНрд░рдХрд╛рд░: std :: unique_ptr <char []> рдХреЛ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Fragment N11

V521 ',' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдРрд╕реЗ рднрд╛рд╡ рдЦрддрд░рдирд╛рдХ рд╣реИрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'm_to, m_from = it-> first.getNumber () рд╕рд╣реА рд╣реИред рдлреНрд▓рд┐рдкрдмреБрдХ.рд╕реАрдкреА 509

class LoadImagesPopup final : public FileBrowserPopup {
  ....
  int m_from, m_to, ....;
  ....
}
void LoadImagesPopup::onFilePathClicked(....) {
  TLevel::Iterator it;
  ....
  it = level->begin();
  m_to, m_from = it->first.getNumber();  // <=
  for (; it != level->end(); ++it) m_to = it->first.getNumber();

  if (m_from == -2 && m_to == -2) m_from = m_to = 1;

  m_minFrame = m_from;
  m_maxFrame = m_to;
  ....
}

рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдПрдХ рдорд╛рди рдХреЛ рдХрдИ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдХреЙрдорд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдХреЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, C ++ рдореЗрдВ "," рдСрдкрд░реЗрдЯрд░ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдкрд╣рд▓реЗ рдСрдкрд░реЗрдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо "рд░реАрд╕реЗрдЯ" рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рджреВрд╕рд░реЗ рдСрдкрд░реЗрдВрдб рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдФрд░, рдпрджреНрдпрдкрд┐ m_to рдЪрд░ рдХреЛ рдПрдХ рдмрд╛рдж рдХреЗ рдЪрдХреНрд░ рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ m_to рдХреЛ рдХреЛрдИ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред

Fragment N12

V532 '* рдкреЙрдЗрдВрдЯрд░ ++' рдкреИрдЯрд░реНрди рдХреЗ рдХрдерди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ: '(* рд╕реВрдЪрдХ) ++'ред trop.cpp 140

template <class T, class Q>
void doGammaCorrect(TRasterPT<T> raster, double gamma) {
  Gamma_Lut<Q> lut(....);

  int j;
  for (j = 0; j < raster->getLy(); j++) {
    T *pix    = raster->pixels(j);
    T *endPix = pix + raster->getLx();
    while (pix < endPix) {
      pix->r = lut.m_table[pix->r];
      pix->b = lut.m_table[pix->b];
      pix->g = lut.m_table[pix->g];
      *pix++; // <=
    }
  }
}

рдПрдХ рдЫреЛрдЯрд╛ рджреЛрд╖, рдЬреЛ рдХреЛрдб рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдФрд░ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡реГрджреНрдзрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд░рд╛рджрд╛ рдерд╛, рд╕реВрдЪрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдЕрд░реНрдерд╣реАрди рдбреАрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдкрд┐рдХреНрд╕ ++ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ ред

Fragment N13

V773 'autoCloseUndo' рдкреЙрдЗрдВрдЯрд░ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИред vectortapetool.cpp 575

void joinLineToLine(....) {
  ....
  UndoAutoclose *autoCloseUndo = 0;
  ....
  autoCloseUndo = new UndoAutoclose(....);
  ....
  if (pos < 0) return;
  ....
  TUndoManager::manager()->add(autoCloseUndo);
}

рдРрд╕реА 20 рд╕реЗ рдЕрдзрд┐рдХ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдереАрдВред рдЕрдХреНрд╕рд░, рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХреЗ рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдХрджрдо рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣ рдпрд╣рд╛рдБ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╕реВрдЪрдХ рдХреЛ TUndoManager :: Manager () -> add () рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдКрдкрд░ рдПрдХ рд╡рд╛рдкрд╕реА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреВрд▓ рдЧрдПред рдЗрд╕рд▓рд┐рдП рдЬрдм рднреА рдЖрдк рдлрдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рддреЛ рдЕрдкрдиреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдпрд╛ рдЖрдЦрд┐рд░реА рд░рд┐рдЯрд░реНрди рд╕реЗ рдкрд╣рд▓реЗ рдбрд┐рд▓реАрдЯ рди рдХрд░реЗрдВ ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдХреЛрдб рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддреА рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЗрдВ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЛрдб, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХрднреА рдердХрд╛ рд╣реБрдЖ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдЯреБрдХрдбрд╝рд╛ N14

V522 рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'рдХреНрд╖реЗрддреНрд░' рдХреЗ рдЕрдкрд╕рдВрджрд░реНрднрди рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред palettecmd.cpp 94

bool isStyleUsed(const TVectorImageP vi, int styleId) {
  ....
  int regionCount = vi->getRegionCount();
  for (i = 0; i < regionCount; i++) {
    TRegion *region = vi->getRegion(i);
    if (region || region->getStyle() != styleId) return true;
  }
  ....
}

рдпрд╣рд╛рдВ рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдпрджрд┐ рдкреЙрдЗрдВрдЯрд░ рдХреА рдкрд╣рд▓реА рдЬрд╛рдВрдЪ рдЭреВрдареА рд╣реЛ рдЬрд╛рддреА рд╣реИ , рддреЛ рдРрд╕реЗ рдЕрд╢рдХреНрдд рдкреЙрдЗрдВрдЯрд░ рдХреА рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП "||" рдпрд╣ рдХрд╛рдлреА рд╡рд┐рдкрд░реАрдд рд╣реИред

Fragment N15

V561 рдпрд╣ 'a' рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рд╡реИрд▓реНрдпреВ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЗрд╕реЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред рдкрд┐рдЫрд▓реА рдШреЛрд╖рдгрд╛: xshcellmover.cpp, рдкрдВрдХреНрддрд┐ 319. xshcellmover.cpp 323

V561 рдпрд╣ ' рдПрдПрдирдмреА ' рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 'cb' рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдкрд┐рдЫрд▓реА рдШреЛрд╖рдгрд╛: xshcellmover.cpp, рд▓рд╛рдЗрди 320. xshcellmover.cpp 324xshcellmover.cpp 323

void redo() const override {
  int ca       = m_cellsMover.getStartPos().x;
  int cb       = m_cellsMover.getPos().x;
  ....
  if (!m_cellsMover.getOrientation()->isVerticalTimeline()) {
    int ca = m_cellsMover.getStartPos().y;
    int cb = m_cellsMover.getPos().y;
  }
  ....
  if (ca != cb) {
    ....
  }
  ....
}

рд╢рд╛рдпрдж рдПрдХ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред X рдХреЛ рдХреЙрд▓ рдХреЛ y рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рд▓реЗрдХрд┐рди рд╡реЗ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреВрд░ рдХрд░рдирд╛ рднреВрд▓ рдЧрдП, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕реНрдерд╛рдиреАрдп рдкреБрди: рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдирддреАрдЬрддрди, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реАрдП рдФрд░ рд╕реАрдмреА рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп , рдирдП рд╕реНрдерд╛рдиреАрдп рд╕реАрдП рдФрд░ рд╕реАрдмреА рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рд╕реАрдП рдФрд░ рд╕реАрдмреА рдореМрдЬреВрдж рд╣реИрдВ ред рдирд┐рд╖реНрдХрд░реНрд╖ N рез



рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ред рд╢рд╛рдпрдж рдореИрдВ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛, рд▓реЗрдХрд┐рди рдЖрдиреЗ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдерд╛: рд▓рдЯрдХрд╛, sagging рдФрд░ Ctrl + Z рджрдмрд╛рдХрд░ рд╡рд┐рд╖рдо рд╡рд░реНрдЧ рдХреЗ рдмрд╛рдж рдЧреЛрд▓реА рдХреЗ рдЕрдкрдиреЗ рд╣реЗрд░рдлреЗрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛ рдирд╣реАрдВ рд╕рдХрд╛ред

image6.png

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ Ctrl + S рджрдмрд╛рдиреЗ рдХреА рдЖрджрдд рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж , OpenToonz рдЕрдкрдиреЗ рдкреИрдорд╛рдиреЗ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реА рдХрд▓рд╛:

image7.gif

рдирд┐рд╖реНрдХрд░реНрд╖ N2

OpenToonz рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдкрд╛рдИ рдЧрдИ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, "рджреНрд░рд╡реНрдпрдорд╛рди рджрдорди" рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдЬрдм рддрдХрдиреАрдХреА рдЛрдг рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рджрдмрд╛рдиреЗрд╡рд╛рд▓рд╛ рдпрдВрддреНрд░ рдЖрдзрд╛рд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛ рдХрд╛рдо рддрд╛рдЬрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рд╕рдордп рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдк рддрдХрдиреАрдХреА рдЛрдг рдХреЛ рд╕реБрд▓рдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкреАрдПрд╕ рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╡рд┐рдХреНрдЯреЛрд░рд┐рдпрд╛ рдЦрд╛рдирд┐рдПрд╡рд╛ред OpenToonz ред




All Articles