2011-02-18 6 views
0

을 줄일 수 있습니다. 그러나JH 연구소 퀀 타이즈 사용법 내가 스크린 샷의 색 농도를 줄이기 위해</p> <p><a href="http://www.jhlabs.com/ip/filters/index.html" rel="nofollow noreferrer">http://www.jhlabs.com/ip/filters/index.html</a></p> <p>에 QuantizeFilter를 사용하는 것을 시도하고 이미지의 색 농도

Robot robo = new Robot(); 
    BufferedImage notQuantized = robo.createScreenCapture(new Rectangle (0, 0, 300, 300)); 
    BufferedImage Quantized = new BufferedImage(300, 300, BufferedImage.TYPE_INT_BGR); 
    File nonquantized = new File ("C:\\nonquantized.png"); 
    File quantized = new File("C:\\quantized.png"); 
    nonquantized.createNewFile(); 
    quantized.createNewFile(); 
    QuantizeFilter bla = new QuantizeFilter(); 

    int [] outPixels = new int[300*300*3]; 
    int [] inPixels = new int[300*300*3]; 

    notQuantized.getRaster().getPixels(0, 0, 300, 300, inPixels); 
    bla.quantize(inPixels, outPixels, 300, 300,2, true, true); 

    Quantized.getRaster().setPixels(0, 0, 300, 300, outPixels); 
    ImageIO.write(Quantized, "png", quantized); 
    ImageIO.write(notQuantized, "png", nonquantized); 

, 내가 남아있는 무슨이다 : 여기

내 아주 아주 간단한 코드입니다

원래 IMG :

enter image description here

양자화 IMG :

enter image description here

문제의 추가 분석은 inPixels 배열이 잘못 채워진 것을 보여줍니다. 그것은 원래 이미지의 3 분의 1로 3 번 채워진다.

어떻게 해결할 수 있습니까?

또한 모든 링크는 Java에서 좋은 + 빠른 양자화 알고리즘을 사용합니까? 내가 찾는 것은 TYPE_INT_BGR 이미지를 취하여 새로운 TYPE_INT_BGR 이미지를 생성하지만 픽셀의 실제 차이는 거의 없으므로 쉽게 압축 될 수있는 알고리즘입니다.

예를 들어 원래 이미지에 255, 255, 234와 같은 값을 가진 픽셀이 있고 255, 255, 236과 같은 값을 가진 픽셀이 둘 다 255,255,240으로 변환되어야합니다. 건배

답변

2

다음의 예는 올바르게 이미지를 변환합니다 :

QuantizeFilter q = new QuantizeFilter(); 
int [] inPixels = new int[image.getWidth()*image.getHeight()*3]; 
int [] outPixels = new int[image.getWidth()*image.getHeight()*3]; 
image.getRaster().getPixels(0, 0, image.getWidth(), image.getHeight(), inPixels); 
q.quantize(inPixels, outPixels, image.getWidth(), image.getHeight(), 64, false, false); 
WritableRaster raster = (WritableRaster) image.getData(); 
raster.setPixels(0,0,width,height,outPixels); 

또한 ImageIO.write가 자동으로 생성으로, 암시 적으로 파일을 생성 할 이유가 없다.

0

내가 게시 한 코드와 동일한 문제가 있었지만 그 오류는 모든 픽셀을 통과하지 않는 QuantizeFilter 클래스입니다. 이 코드 부분

if (!dither) { 
     for (int i = 0; i < count; i++) 
      outPixels[i] = table[quantizer.getIndexForColor(inPixels[i])]; 

을 찾아 마지막 두 매개 변수가 false로 설정하는 경우이 만 수정이므로주의 해주십시오 3.

에 의해 수를 곱해야합니다.