A biblioteca permite a aplicação de um efeito de lente a um Java Swing JPanel
Para a versão v1.2, criei um aplicativo de demonstração que exibe a lente em um JFrame, que pode ser arrastado por toda a tela
Eu criei o efeito lente para fornecer um recurso envolvente para a seção "Sobre" do aplicativo de criptografia de arquivos
A biblioteca permite a aplicação de um efeito de lente a um Java Swing JPanel
Para a versão v1.2, criei um aplicativo de demonstração que exibe a lente em um JFrame, que pode ser arrastado por toda a tela
O efeito da lente é criado usando uma transformação de coordenadas polares, onde o ângulo permanece o mesmo, e o raio é alongado perto do centro enquanto é comprimido em direção às bordas. O raio permanece inalterado no centro e nas bordas
Um filtro de alisamento gaussiano com um tamanho de 3x3 é então aplicado
O pequeno efeito da lente de aplicação foi o subproduto de uma pausa de primavera sem planos.
Naquela época, eu estava terminando de programar a primeira versão do codificador (File Encoder Application), e eu precisava de algo atraente para o About...
A ideia original não é minha, mas eu a implementei com base em um efeito que eu tinha visto em uma daquelas demos icônicas do DOS.
Eu decidi encapsular o efeito dentro de um Java Swing JPanel para o meu projeto.
Tudo dentro do painel pode ser ampliado usando uma lupa posicionada em suas coordenadas escolhidas.
Foi especialmente desafiador garantir que a atualização dos componentes do texto, especialmente ao modificar a localização do texto selecionado, não afetasse negativamente a aparência visual.
Quando você cria o LensJPanel, o conteúdo do JPanel é aplicado ao elemento que sofrerá o efeito de aumento. Você pode especificar o raio da lupa e se ele ampliará ou diminuirá o conteúdo.
Quando você tem o raio e determina se a lupa ampliará ou diminuirá o conteúdo, uma matriz quadrada bidimensional é criada com um elemento para cada pixel quadrado contendo a lupa.
O algoritmo calcula as coordenadas do pixel de origem correspondente na imagem original para cada pixel de destino para determinar a cor ao aplicar a transformação.
A transformação envolve uma simples transformação de coordenadas polares, razão pela qual uma lente de aumento é utilizada:
Um pixel é calculado a partir de uma posição específica do quadro da lente e é usado para determinar a cor quando a transformação é aplicada.O pixel também estará dentro do quadro da lente.Além disso, o raio do centro da lente para o ângulo de um determinado pixel é calculado.O pixel de "origem" para o pixel que estamos calculando estará no mesmo ângulo, mas o raio mudará.O raio se estende de 0% a 100% para os pixels “alvo” e “fonte”, com 100% representando o comprimento do raio da lente.O pixel de origem é calculado para cada pixel alvo mantendo seu ângulo e transformando o raio usando uma função com um derivado monotonicamente crescente. Essa transformação ocorre no intervalo entre 0 e 1, onde f(0) é igual a 0 e f(1) é igual a 1. Aqui, 0 representa 0% do raio da lente e 1 representa 100% do raio da lente.Isso significa que os raios tirarão seu pixel de origem de um raio menor, o que expandirá o círculo da lente.Fora do círculo da lente, a transformação será a identidade, o que significa que o pixel de origem não mudará.
A explicação é um pouco confusa, mas se você estiver interessado em aprender mais sobre o assunto, sinta-se à vontade para entrar em contato comigo.
Espero que alguém ache útil :-).
A nova versão do aplicativo apresenta uma janela gráfica circular com uma lente móvel que pode ser controlada clicando e arrastando com o mouse.
Você pode sair da aplicação pressionando ESC.
Alguns problemas são evidentes:
A nova versão do aplicativo aborda um bug de transparência que ocorreu nos sistemas operacionais Mac e Linux.
A última versão também aborda o problema de pixelação encontrado nas versões anteriores.
Isto é conseguido através da aplicação de um filtro de alisamento gaussiano na imagem da lente, criando um efeito de desfocagem que reduz a pixelação causada pela ampliação.
A última subversão disponível desta versão funciona com Java-8 e Java-11.