Mensagens enviadas por: entanglement
Índice dos Fóruns » Perfil de entanglement » Mensagens enviadas por entanglement
Autor Mensagem
Costumo fazer o seguinte: uso algum programa que faz a conversão para mim (como o ImageMagick, http://www.imagemagick.org/script/index.php ) e o chamo via Runtime.exec.

Entretanto, parece que a API ImageIO tem um "writer" para o formato BMP. Vou dar um exemplo:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5076878

Não se esqueça que usar um número mágico (20) não é recomendável em C++.

Em vez disso, você DEVE usar as constantes simbólicas, definidas na documentação (o MSDN é seu amigo de fé e seu irmão camarada )

Além disso, em C++ é aconselhável usar sempre o indicador de escopo global ("::") para indicar APIs do Windows.
O código abaixo funciona corretamente. Não se esqueça de usar as bibliotecas user32.lib e advapi32.lib.

Você está passando os parâmetros errados, usando as APIs erradas, e provavelmente passando um tipo de arquivo errado. O Windows XP só aceita arquivos .bmp, não .png ou .jpeg. Você precisa efetuar as conversões manualmente para .bmp se precisar usar com Windows XP; no Windows Vista ou 7 é possível passar um arquivo .jpg.
juloko666 wrote:
Por que isso Double.parseDouble("2.382E-42"), imprime 0, se o valor deveria ser 89.96????


Como é que você conseguiu isso? Por mágica, não?


No meu caso, imprimiu "2.382E-42".
Se você já estudou inglês, sabe que a saída esperada deste programa é 26. Experimente!

É assim.

Digamos que você queira editar uma imagem gerada por uma câmera digital de 12 megapixels, ou seja, essa imagem deve ocupar 12 * 1000000 * 4 bytes = 48 Megabytes em memória se você usar 32 bits por pixel (o que não é tão impossível assim - vários formatos usam exatamente esse layout).

Normalmente você não carrega a imagem inteira na memória FÍSICA, e sim cria uma espécie de "memória virtual" onde só uma subimagem dessa imagem total é que fica presente na memória.

Para fazer esse tipo de coisas, você precisa de uma biblioteca poderosa, normalmente fornecida por terceiros e que costuma funcionar melhor com outras linguagens, não Java.

Se você, em vez disso, quiser fazer tudo isso do zero e sem pagar um tostão, precisa pelo menos usar uma biblioteca como a JAI - a Java ImageIO não é suficiente para o que você quer. No FAQ do JAI eles indicam o que fazer com imagens grandes.

http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html#largeimages

Que tal dar uma lida em alguns links que
jefers0n wrote: senão corre-se o risco de anulação pois não posso usar nada que eu não saiba o que estou fazendo...


Você conseguiria fazer o mesmo problema usando um simples array?
No seu caso é bem mais simples, já que o array pode ser um array de booleanos, uma entrada para cada letra.
Por exemplo, para indicar que você achou a letra 'A' nesse array de booleanos, você faria:


Então você seta uma entrada para true se achar a letra correspondente à sua entrada, e cria um método que retorna a contagem de entradas "true" no seu array de booleanos. Não precisa usar "set" nem nada muito complicado.
Dica: use um programa (como o ImageMagick, que tem interfaces em Java para você usar) que pegue a tal imagem e a converta para uma imagem menor, que você possa carregar sem estourar sua memória.
Ora, o valor 10 em decimal é A em hexadecimal.

Se você quer pegar a string 10 em hexadecimal (cujo valor em decimal é 16) e imprimi-la como 10, ou então pegar a string 105 em hexadecimal (cujo valor em decimal é 261) você precisa usar um método que converte uma string hexadecimal em um número, e então voltar.

Exemplo:
Alguns tipos de imagens são em "tiles" (como o TIFF) e permitem que você edite apenas uma "tile" dela, ou seja, uma porção, não a imagem completa, para evitar esse tipo de problema (gastar uma quantidade excessiva de memória).

Veja os métodos do JAI.
Não sou muito conhecedor do Linux, mas qual delas funciona melhor no Linux (ou seja, sem depender de algum "hack" para poder funcionar mais ou menos?)
Use o método isAssignableFrom.
Rode o programa abaixo, e confira a sua saída (arquivo "teste.bin") em um editor hexa. O Java escreve e lê os bytes direitinho. Se você conseguir rodar o programa abaixo direitinho, ele não deve mostrar nada na tela, e gerar um arquivo binário "teste.bin" de 256 bytes.



Exemplo da saída em um editor hexa:


Dica: você teve algumas dificuldades com o "Ç"? É que em Windows-1252 (a codificação usada em C por programas Windows, similar à ISO-8859-1) o Ç tem código 128, e em Unicode o código é U+00C7, ou seja, 199.

Acho que foi isso que lhe confundiu - você NUNCA, NUNCA NUNCA NUNCA deve converter bytes em strings e depois voltar, porque você pode ter uma surpresa desagradável.
 
Índice dos Fóruns » Perfil de entanglement » Mensagens enviadas por entanglement
Ir para:   
Powered by JForum 2.1.8 © JForum Team