Pergunta

Estou tentando pegar um bufferImage, aplicar uma transformação de Fourier (usando o JTransforms) e escrever os dados de volta ao bufferImage. Mas estou preso criando uma nova varredura para definir os resultados, estou perdendo alguma coisa aqui?

BufferedImage bitmap;
float [] bitfloat = null;

bitmap = ImageIO.read(new File("filename"));
FloatDCT_2D dct = new FloatDCT_2D(bitmap.getWidth(),bitmap.getHeight());

bitfloat = bitmap.getData().getPixels(0, 0, bitmap.getWidth(), bitmap.getHeight(), bitfloat);
dct.forward(bitfloat, false);

Mas estou perplexo tentando terminar essa linha, o que devo dar ao CreaterStern Função? Os Javadocs para Createraster fazem pouco sentido para mim:

bitmap.setData(Raster.createRaster(`arg1`, `arg2`, `arg3`));

Estou começando a me perguntar se uma matriz de flutuação é necessária, mas não há muitos exemplos de jtransforms por aí.

Foi útil?

Solução

Não crie um novo Raster. Usar WritableRaster.setPixels(int,int,int,int,float[]) Para escrever a matriz de volta à imagem.

final int w = bitmap.getWidth();
final int h = bitmap.getHeight();

final WritableRaster wr = bitmap.getData();
bitfloat = wr.getPixels(0, 0, w, h, bitfloat);

// do processing here

wr.setPixels(0, 0, w, h, bitfloat);    

Observe também que, se você está planejando exibir esta imagem, deve realmente copiá -la para um Tipo compatível com tela; Imageio raramente os retorna.

Outras dicas

Estou pesquisando o Google por floatdct_2d para ver em que pacote/biblioteca está, e parece que existem várias referências a várias fontes, como "edu.emory.mathcs.jtransforms.dct.floatdct_2d". Sem saber qual biblioteca personalizada você está usando, é realmente difícil dar -lhe algum conselho sobre como executar a transformação.

Meu palpite é em geral que você deve ler os dados de entrada da varredura original, executar a transformação nos dados originais e, em seguida, escreva a saída para uma nova varredura.

No entanto, sua última declaração por conta própria parece estranha ... Raster.createRaster() Parece que você está chamando um método estático sem parâmetros em uma classe que você nunca referenciou no código que publicou. Como isso está gerando dados para o seu bitmap ??? Mesmo no código pseudo, você precisaria obter os resultados da sua transformação e construir a varredura resultante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top