Efeito Lente

Eu criei o efeito lente para fornecer um recurso envolvente para a seção "Sobre" do aplicativo de criptografia de arquivos

Descrição

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

Descrição do código

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

Windows

Efeito da lente v1.1 (2015)

Download

Efeito da lente v1.2 (2018)

Download

Efeito da lente v1.3 (2019)

Assista vídeo
Download

Versões

image

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 :-).

image

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:

  • É impossível atualizar frequentemente o fundo ampliado, já que, para tirar uma captura de tela, você tem que definir a janela como transparente, o que causa uma cintilação irritante.
  • A imagem é bastante pixelizada, especialmente na parte central da lupa.
image

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.

Vídeos

Downloads