캔버스 멋지다! - 페이지 88

 
Vitaliy Kuznetsov #:

또한 다음과 같은 오류를 발견했습니다.

이 이미지에서 오류가 발생했습니다. 확실히 PNG이지만 데이터에 DPI가 없습니다.

//upd. 일부 이미지에는 PDI 데이터도 없지만 작동합니다.

이미 PNG 압축 해제 알고리즘은 제가 개발한 것이 아니라고 썼듯이 저는 7년 전에 Zorro입니다. 더 정확히 말하자면, C++ 코드에서 포팅한 것이 틀림없습니다. 또한이 코드는 항상 오류를 발생 시켰고 단순히 무시하여이 오류를 우회 한 후 압축 해제가 작동했습니다. 그래서 일부 조인트가 있을 수 있습니다. PNG 형식과 그 버전의 사양을 이해하지 못했습니다. 이 형식이나 jpg 형식에 대해 더 자세히 알아볼 필요가 있을 것 같습니다.

특히 이 PNG 파일은 24비트 대신 8비트 컬러 마스크를 사용하여 투명도 없이 사각형으로 삐뚤어져 있습니다.

 
Renat Akhtyamov 표시기 전환 및 설정을 위한 자체 패널을 작성할 수 있습니다.....

다음과 같이

나는 그것이 시장에서 잘 내려갈 것이라고 생각합니다.

그래서 투명한 배경에 아이콘을 파싱하고 크기를 조정하는 예제를 만들었습니다.


 
Nikolai Semko #:

이미 작성했듯이 PNG 압축 해제 알고리즘은 제가 개발한 것이 아니라 7년 전에 Zorro가 개발했습니다 . 더 정확히 말하자면, 그는 C++ 코드에서 포팅한 것이 틀림없습니다. 게다가 이 코드는 항상 오류가 발생했고, 저는 이 오류를 무시하고 압축 해제가 작동하도록 우회했습니다. 그래서 일부 조인트가 있을 수 있습니다. PNG 형식과 그 버전의 사양을 이해하지 못했습니다. 이 형식이나 jpg 형식에 대해 더 자세히 알아볼 필요가 있을 것 같습니다.

특히 이 PNG 파일은 24비트 대신 8비트 컬러 마스크를 사용하여 투명도가 없는 사각형으로 비뚤어져 있습니다.

니콜라이 셈코 #:

시도해 봤습니다. 크기를 조정하는 경우에만 사각형이 발견되었습니다. 그래서 제 크기 조정 알고리즘이 완벽하지 않을 수 있습니다. 나는 이미이 알고리즘이 문자 그대로 반나절 만에 즉석에서 만들어 졌다고 꽤 오래 전에 한 번 썼습니다. 지금 저는 이 알고리즘을 아주 다르게 만들 것입니다. 하지만 안타깝게도 아직 시간이 없습니다.

3 개 이상의 코드를 작성하는 데 하루, 5 개 이상의 코드를 작성하는 데 한 달이 걸린다는 것을 스스로 이해합니다. 그리고 프로젝트가 큰 경우 용어는 더 큰 범위에있을 수 있습니다.

우리가 가진 것에 대해 감사합니다. 지금은 이 정도면 충분합니다.

 

캔버스에서 중앙에서 원형 그라데이션으로 화면을 채울 수 있는 방법이 있나요?

여기 수직 그라데이션의 예가 있습니다 - https://www.mql5.com/ru/code/31689

 
Vitaliy Kuznetsov #:

캔버스에 중앙에서 원형 그라데이션으로 화면을 채울 수 있는 방법이 있나요?

여기에 수직 그라데이션의 예가 있습니다 - https://www.mql5.com/ru/code/31689


하나의 공식만 있으면 됩니다:

R2 = X2+Y2

저는 심지어 함수

 
Vitaliy Kuznetsov #:

캔버스에 중앙에서 원형 그라데이션으로 화면을 채울 수 있는 방법이 있나요?

여기에 수직 그라데이션의 예가 있습니다 - https://www.mql5.com/ru/code/31689

이 옵션을 사용할 수 있습니다:

void iCanvas::RadiusGrad(double x, double y, double r, uint clr_center, uint clr_end){
   int x_left = Floor(x-r);
   int x_right = Ceil(x+r);
   int y_top = Floor(y-r);
   int y_bottom = Ceil(y+r);
   double r2=r*r;
   if (x_left<0) x_left = 0;
   if (x_left>=m_width) return;
   if (x_right>m_width) x_right = m_width;
   if (x_right<0) return;
   
   if (y_top<0) y_top = 0;
   if (y_top>=m_height) return;
   if (y_bottom>m_height) y_bottom = m_height;
   if (y_bottom<0) return;
   
   argb c1,c2, c;
   c1.clr =clr_center;
   c2.clr =clr_end;
   
   for(int i_y=y_top;i_y<y_bottom;i_y++) {
      for(int i_x=x_left;i_x<x_right;i_x++) {
         int adr = i_y*m_width+i_x;
         double r1 = (i_x-x)*(i_x-x)+(i_y-y)*(i_y-y);
         if (r1<=r2) {
            double k = sqrt(r1)/r;
            for (int i=0;i<4;i++) c.c[i] = uchar(c1.c[i] + k*((int)c2.c[i]-c1.c[i]));
            MixColor(c.clr,m_pixels[adr]);
         }
      }
   }
}
그라데이션은 알파 채널(투명도)로도 이동
파일:
 
Nikolai Semko #:

이 옵션을 사용할 수 있습니다:

그라데이션도 알파 채널(투명도)로 이동

감사합니다, 한번 시도해 보겠습니다.

 

니콜라이, 안녕하세요!

그래프를 보는 기간을 편리하게 선택할 수 있도록 슬라이더를 만들어 달라고 요청했습니다.

진심이었어요:


매우 편리합니다!
 
Renat Akhtyamov #:

니콜라이, 안녕하세요!

그래프를 보는 기간을 편리하게 선택할 수 있도록 슬라이더를 만들어 달라고 요청했습니다.

진심이었어요:


매우 편리합니다!
첫째, 그다지 편리하지 않습니다 (IMHO).
둘째, 이러한 실현은 시간이 많이 걸립니다.
 
Nikolai Semko #:
첫째, 그다지 편리하지 않습니다(IMHO).
문제는 이와 같은 것을 구현할 때 필연적으로 슬라이더 길이의 치명적인 부족에 직면하게된다는 것입니다.
일반적으로 이것은 하나가 아닌 단일 슬라이더로 구현되며 버튼을 가장자리로 드래그하여 너비를 변경하여 눈금을 변경할 수 있습니다. 그러나 이 방법은 더 편리하지만 슬라이더 길이 문제를 해결하지는 못합니다.