Como copiar pixels de um bitmap para outro como um círculo?
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]) ;
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