Archive for novembro \20\-02:00 2011

Tips: Imagens transparentes com GIMP

Posted on novembro 20, 2011. Filed under: Tips |

Essa dica é para aqueles desenvolvedores que precisam fazer com que uma imagem tenha fundo transparante e não querem incomodar um design da equipe por causa de uma atividade tão simples. Portanto, essa dica é para vocês.

Vamos demonstrar a funcionalidade de transparência no maravilhoso Gimp.

Primeiro passo é abrir a imagem no GIMP:

O próximo passo é acionar a opção “Add Alpha Channel”, através do menu Layers -> Transparency -> Add Alpha Channel. Mais informações sobre a opção em http://docs.gimp.org/2.6/en/gimp-layer-alpha-add.html.

Seguindo, clique o botão Fuzzy Select Tool:

Selecione toda à área que deseja remover. Normalmente o background. Algumas imagens vão dar mais trabalho do que outras para fazer essa limpeza do background:

Após selecionar à area que deseja limpar, clique no menu Edit -> Clear ou botão Delete do teclado.
O background da imagem ficará semelhante à:

Ok, agora é só salvar a imagem no formato png ou gif e usá-la onde desejado, já com o fundo da imagem como transparente.

Veja abaixo exemplo antes e depois do tratamento da imagem, usando uma cor de background diferente de branco.

Esta dica vale também para o GIMP idioma português.

Ler Post Completo | Make a Comment ( 2 so far )

Java Tips: Tempo máximo de execução de uma tarefa

Posted on novembro 6, 2011. Filed under: Java, Tips |

O código abaixo pode ser usado para caso queria que determinada tarefa dure no máximo um determinado tempo. Você determina um timeout para a execução de uma determinada tarefa. Útil por exemplo, caso tenha um processo que depende de outros processos externos. Pode acontecer desse processo externo demore muito para responder, dessa maneira, sua aplicação pode ficar parada por muito tempo e prejudicar o usuário. Nesse cenário é interessante determinar um timeout para nosso processo.

A solução utiliza a classe FutureTask que permite chamadas assíncronas que podem ser canceladas, verificar se uma computação foi completada, obter o resultado de uma computação ou utilizar o método get para bloquear a computação.

Código exemplo:

import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ExecutionTimeout {
       
    public static void main (String[] args) throws InterruptedException {
        FutureTask<?> theTask = null;
        try {
            // cria uma nova tarefa
            theTask = new FutureTask<Object>(new Runnable() {
                public void run() {
                    while(true) {
                        // código do seu processo
                        if (Thread.interrupted()) return;
                    }
                }
            }, null);
            
            // inicia a tarefa em uma nova thread
            new Thread(theTask).start();
            
            // bloquear a tarefa caso ultrapassar 10 segundos
            theTask.get(10L, TimeUnit.SECONDS); 
        }   
        catch (TimeoutException e) {
             // cai aqui caso ultrapassar os 10 segundos           
            System.out.println("Processo ultrapassou os 10 segundos");
            
            // parar o processo caso desejado
            theTask.cancel(true);
            
            // ou sair da aplcacação
            //System.exit(1);
            
        } catch (Exception ee) { }
    }
}
Ler Post Completo | Make a Comment ( None so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: