Tenho um software utilizado pelos geólogos para fazer descrição mineralógica de amostras de rocha. Este software interage com um dispositivo que move a platina do microscópio. Ou seja, à medida que o geólogo vai descrevendo os minerais na amostra, a platina vai modendo-se para o próximo ponto de descrição. Essa análise do Geólogo cria uma espécie de percurso de descrição. É importante manter e representar no software este percurso. Entre um ponto de descrição e outro, existe um passo de deslocamento. Este passo pode variar entre 0,005mm e 16mm. A amostra da rocha tem 40mmX40mm. Eu represento essa amostra em um JPanel de 400X400 pixels. Todavia, quando preciso representar passos muito pequenos (0,005mm, por exemplo), o usuário não consegue distinguir os pontos de descrição representados no “mapa”. Por isso, preciso implementar um tipo de zoom.
A primeira técnica que resolvi implementar é a de foco+contexto. Ou seja, eu altero a escala de tudo e foco na parte desejada. Mas não sei como fazer isso direito…Até consegui aumentar ou diminuir a representação das minhas estruturas, mas tem vezes que eu preciso gerar áreas desenhadas muito grandes, que não cabem em JPanels, e meu usuário deveria ser capaz de movimentar essa visualização, clicando em cima e arrastando…Alguém tem alguma idéia de como posso fazer?
Uma das abordagens que usei foi colocar o painel que contém o mapa desenhado, dentro de um ScrollPane. Todavia, à medida que eu atualizo o zoom e meu componente interno aumenta de tamanho, o scrool não altera a escala de suas barras de scroll…Ou seja, eu estou num zoom 100% (400X400 pixels), coloco um zoom de 10000% , resultando um painel de 40000X40000 pixels e as barras de scroll nem aparecem…PReciso dar um resize na janela pai pra aparecer…Tem como eu forçar o scrollPane a avaliar isso e apresentar as barras se necessário?
Acabei criando um sistema de coordenadas virtuais. Minha figura tem um ponto de origem virtual, que define a partir de que ponto ela é desenhada e toda a minha estrutura fica sobre essa figura. Consigo mover essa estrutura pelo painel, setando esta origem e consigo dar zoom, alterando a escala das minhas estruturas…Todavia, agora tneho um problema que não consegui resolver ainda.
Através da rolagem do mouse eu queria controlar o zoom (já faço isso), mas queria que meu ponto virtual permanecesse fixo onde o mouse está apontando (ponto real), enquanto o contexto aumenta de tamanho. Ou seja, o meu mouse daria o foco do zoom, enquanto a rolagem aumentaria o zoom do contexto. Não consegui fazer isso direito ainda. O que fiz até agora foi o seguite:
Ou seja, minha idéia era alterar o ponto a partir do qual a figura seria desenhada, de modo que alterando o zoom, o ponto virtual que eu estava apontando continue fixo no ponto real em que meu mouse está…Só não sei o que estou fazendo de errado…
Cara, eu sei que em JOGL(Java OpenGL) é tranquilo de fazer esse tipo de coisa. Mesmo pq já existe todo um arcabouço de conhecimento do OpenGL. Eu mesmo já fiz coisas parecidas.
Agora, em Java Image não sei como vc poderia fazer isso não =/
nao tenho mais meu códigos pois fiz a tempo
mas algo que fiz foi tratar pixel a pixel.
jogar eles em uma matriz e multiplicalos proporcinalmente pelo zoom+ ou zoom -…
nao sei te ajudar com código pois é meio complicado e é tempo que fiz algo assim…
flw
Na verdade eu não trabalho com a imagem Raster. Eu desenho tudo em um JPanel, a partir de uma estrutura de relacionamendos entre elementos que eu mantenho em memória. Ou seja, não manipulo a imagem, manipulo a forma através da qual minha estrutura é desenhada…Já resolvi o problema…Se chegar em casa eu posto o código aqui.
Se fosse para aplicar zoom em imagem, o Java2D já oferece recursos com as transformadas afins.