Visualizador de Imagens

Pesoal é o seguinte: Aqui no meu trabalho trabalamos com imagens e possuimos arquivos de vídeos que têm até 300 frames, cada frame com 1024x1024 pixels.

Esses 1024x1024x300 pixels ficam armazenados num grande vetor de BYTES.

O que eu gostaria de fazer é um visualizador em JAVA que me forneça a maior taxa de fps possível (de preferencia 30 fps ou mais).

Porém, não tenho a menor idéia de como fazê-lo. Alguém tem alguma idéia ou mesmo trechos de código que realizam essa exibição??

Agradeço a ajuda de quem souber.

Caramba, 1024x1024 a 30 frames por segundo acho que nem o media player aqui consegue hehehe. Pra começar, a taxa de transferência pra sua placa de vídeo tem de ser bem rápida para isso.

Se entendi direito, o que vc quer não é um simples visualizador de imagens, mas sim um tocador desse formato de vídeo né? No java tem uma api que suporta esse tipo de coisa, dependendo do formato do seu vídeo já tem pronto, acho que é java media api.

Mas se não servir, como diria nosso amigo Jack, o estripador, devemos ir por partes:

1º, você precisará criar uma imagem desse tamanho todo, com a profundidade (bits por pixel) desejada. Para isso, recomendo o uso de java.awt.image.BufferedImage

2º, vc deve criar algo que, dado uma stream de dados, leia os dados e transforme-os em uma imagem estática, colocando nesse BufferedImage que foi criado

3º, crie um método que retorne essa imagem estática de um frame que você queira, por exemplo, você passa o número 0 e ele te retorna o frame 0, 1 o frame 1, e assim por diante, com você passando alguma stream também pra ele. ele deverá se posicionar na stream no início do frame e chamar o método criado no passo 2.

4º Depois de implementar estes 3, você já fez 90% do trabalho, depois é só fazer um loop pra ir fazendo isso conforme o tempo passar… provavelmente será necessário pular alguns quadros para alcançar a velocidade de 30 fps, mas é fácil também. Para saber quanto tempo cada quadro deve ser apresentado, é só fazer 1000 / fps que vc tem o número em milisegundos. Aí basta usar alguma rotina que retorne o tempo e fazer as contas…

Espero ter ajudado… flw

para imagens estaticas, eh melhor usar algo mais “leve” que o BufferedImage, tipo o Image…
o ideal seria vc guardar todas as imagens na memoria e ir mostrando, mas fazendo algumas contas: 1024 * 1024 * 4 * 300 = 1,2 mb de memoria (contando que cada pixel vai ser armazenado em ints), entao vc vai ter que usar um buffer e ir lendo aos poucos…

mas essa conta que vc colocou aí é a que serve pro BufferedImage takeshi10… o que vc quer dizer com “algo mais leve”?

e sobre ir lendo aos poucos, isso mesmo, foi o que tentei escrever ali em cima hehehe

[edit]aliás… essa conta aí da bem mais de 1.2 MB!!! deu 4 MB pra cada quadro, ou seja, 1.2GB!

ops coloquei a letra errada =P
e sim, era o que vc tentou escrever (e eu entendi), soh quis colocar de maneira um pouco mais clara…