É legal, mas não há anti-aliasing algum. Desenhar com quadrados de pixels está ultrapassado.
Aqui está um exemplo que demonstra que o antialiasing existe na natureza:
E o código?
E o código?
De nada:
#property copyright "2009-2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property description "Demonstrating Canvas features" #property script_show_inputs //--- #include <Canvas\CanvasPro.mqh> //+------------------------------------------------------------------+ //| entradas| //+------------------------------------------------------------------+ input int pause = 20; // atraso em milissegundos entre a saída para a tela input bool top = false; // desenhar sob o gráfico? input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Método de processamento de cores input int Ncirl =30; // número de círculos input int MaxSizeCircle = 200; // tamanho máximo dos círculos //+------------------------------------------------------------------+ //| Função de início do programa de script| //+------------------------------------------------------------------+ int OnStart(void) { double r1[],r2[],k1[],k2[]; int x[],y[]; uint col[]; int j=0; ArrayResize(r1,Ncirl); ArrayResize(r2,Ncirl); ArrayResize(k1,Ncirl); ArrayResize(k2,Ncirl); ArrayResize(x,Ncirl); ArrayResize(y,Ncirl); ArrayResize(col,Ncirl); ChartSetInteger(0,CHART_FOREGROUND,top); int Width =(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); // obter a largura da janela int Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // obter a altura da janela uint ColorScreen=(color)ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);// obter a cor de fundo da janela CCanvasPro canvas; if(!canvas.CreateBitmapLabel("SampleCanvas",0,0,Width,Height,format)) { Print("Error creating canvas: ",GetLastError()); return(-1); } canvas.SetBack(false); canvas.Erase(ColorScreen); canvas.Update(); srand(GetTickCount()); for(int i=0;i<Ncirl;i++) { x[i]=rand()%Width; y[i]=rand()%Height; r1[i]=rand()%MaxSizeCircle; r2[i]=rand()%MaxSizeCircle; k1[i]=(double)(rand()%10)/1000; k2[i]=(double)(rand()%10)/1000; col[i]=XRGB(rand()%255,rand()%255,rand()%255); } while(!IsStopped()) { canvas.Erase(ColorScreen); for(int i=0;i<Ncirl;i++) canvas.CircleSS(x[i],y[i],r1[i]*fabs(sin(j*k1[i])),r2[i]*fabs(sin(j*k2[i])),col[i]); Sleep(pause); canvas.Update(); j++; } ObjectDelete(0,"SampleCanvas"); canvas.Destroy(); return(0); }
E o código?
O cCanvas padrão já tem vários métodos de suavização para todas as formas, certo?
Infelizmente. Até mesmo a última função de círculo baseada no método de Wu contém bugs e apresenta um erro perceptível na suavização em locais diagonais do círculo devido à primitividade desse método, além de ser muito abaixo do ideal em termos de velocidade. Formas preenchidas especialmente suavizadas simplesmente não existem.
E o código?
Bem, então só posso participar da pergunta.
É estranho que esteja me fazendo essa pergunta. Eu não trabalho na Metaquotes, embora sonhe em trabalhar lá. Se eu trabalhasse nessa empresa, seria capaz de trabalhar bem nessa questão, bem como não apenas na questão da suavização na biblioteca CCanvas, mas também, por exemplo, em funções 3D completas na tela.
Mas agora tenho apenas experimentos feitos de joelhos, que tenho medo de publicar, porque sei que posso fazer melhor, mas isso leva tempo.
É estranho que esteja me fazendo essa pergunta. Eu não trabalho na Metaquotes, embora sonhe em trabalhar lá. Se eu trabalhasse nessa empresa, seria capaz de trabalhar bem nessa questão, bem como não apenas na questão do anti-aliasing na biblioteca CCanvas, mas também, por exemplo, em funções 3D completas na tela.
Mas agora apenas experimentos, montados de joelhos, que tenho medo de publicar, porque sei que posso fazer melhor, mas isso leva tempo.
Pela décima vez, o tópico está marcado como não lido, embora não haja edições de mensagens ou novas mensagens.
Alguém está bagunçando ou o fórum está com problemas?
Pela décima vez, o tópico está marcado como não lido, embora não haja edições de mensagens ou novas mensagens.
Alguém está bagunçando ou o fórum está com problemas?
Suspeito que o autor (autor?) esteja editando sua mensagem.
Outra opção: alguém começou a escrever uma mensagem e desistiu, agora essa mensagem está suspensa no modo de edição, e o fórum a cada minuto (5, 10 minutos?) observa que algo está acontecendo no tópico.

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Indicadores personalizados e infográficos no CCanvas foi publicado:
O artigo considera novos tipos de indicadores com uma implementação estrutural mais complexa. Ele também descreve o desenvolvimento de indicadores do tipo pseudo-3D e infográficos dinâmicos.
Nós examinamos as classes e os princípios de construção de formas complexas usando primitivas. Ao descrever a classe para a construção de indicadores do tipo histograma, eu mencionei a possibilidade de desenho de objetos pseudo-3D (Fig. 13) por meio da seleção de cores. No entanto, a pirâmide não é uma figura plana. Portanto, nós temos que usar sua projeção isométrica em um determinado sistema de coordenadas bidimensional. A estrutura básica não contém muitos elementos (Fig.14), mas o método da projeção e visualização da pirâmide é a parte principal da implementação da classe.
Fig. 14. Estrutura básica da classe CPyramid
Autor: Alexander Fedosov