Pergunta

Estou usando funções setpixel e getpixel, mas eles estão usando matrizes que são naturalmente retângulo. Estou tentando copiar pixels em forma de círculo!

Atualização: agora estou usando isso, mas espero que haja algo mais eficiente do que este:

for(int i=0;i<eHeight ; i++)
        for(int j=0;j<eWidth ; j++)
            if( Math.pow((i-eHeight/2),2) +  Math.pow((j-eWidth/2),2) < Math.pow((eHeight/2),2)) 
                mutable.setPixel((int)xpos+j, (int)ypos+i, r[i*eWidth + j]) ;
Foi útil?

Solução

Se o seu círculo for corrigido, aposto que há uma maneira de usar máscaras para fazê -lo muito rápido - o Google me diz que o PorterDuffxfermode é o que você precisa.

Caso contrário, você pode economizar algum tempo fazendo o cálculo com mais eficiência. Primeiro, não use prisioneiros de guerra para encadear coisas. Segundo, pré -computa o raio fora do loop. Seu compilador, em teoria, consertará tudo isso para você, mas não conte com isso.

Terceiro, considere usar Algoritmo do Círculo de Bresenham Para encontrar o início e o final de cada linha do círculo e copie os pixels uma linha de cada vez, em vez de um pixel de cada vez.

Outras dicas

Você precisará fazer algumas contas para descobrir se o pixel que você está prestes a copiar deve fazer parte do círculo ou não.

(x - h)^2 + (y - k)^2 = r^2
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top