2014-11-04 3 views
0

압축 알고리즘을 작업 중입니다. 8 비트/픽셀의 이미지 파일을 읽고 압축하기 위해이 8 비트 값을 4 비트로 압축합니다. 비트에 대한 유용한 통찰력을 원합니다. 자바로 포장하고 어떻게이 문제에 접근 할 수 있습니까? 나는 해결책이 필요 없다. 그냥 안내.비트 포장 Java

미리 감사드립니다.

+1

실제 압축 알고리즘은 무엇입니까? – harold

+0

@harold 양자화를 사용하겠습니다. 균등 양자화 – Shehlina

+0

괜찮 았던 것입니다. 그렇다면 4 비트 일을 해독하고 (쌍을 취하고'(a << 4) | b'와 결합하십시오), 바이트를 보내십시오. – harold

답변

0

Java에는 숫자 비트를 테스트/조작 할 수있는 연산자가 있습니다. 이것 좀보세요 :

Bitwise and Bit Shift Operators

당신이 비트 더 많은 양을 처리해야하는 경우도 Bitset 클래스가있다.

기본적으로 필요한 것은 비트 연산자로 byte 또는 int 유형의 변수 비트를 테스트/조작하는 것입니다. 로 볼 수

1

귀하의 압축 루틴은 다음과 같습니다

void compress(byte[] pic, byte[] picCompressed) { 
    boolean odd = false; 
    int pos = 0; 

    for (byte p : pic) 
    { 
     byte b = quantize(p); 

     if (odd) { 
      picCompressed[pos++] |= (byte)(b << 4); 
     } else { 
      picCompressed[pos] = b;    
     } 

     odd = !odd; 
    }  
} 

원래의 배열은 루프에 이송됩니다. 가변적 인 변수에 의해 제어됨에 따라, 압축 된 4 비트는 압축 된 배열의 바이트 위치의 상단 또는 하단에 채워집니다.

가장 단순한 양자화 루틴은 바로 하위 4 개 비트를 무시합니다 : 실제로

byte quantize(byte p) { 
    return (byte)((p >> 4) & 0x0F); 
} 

는 양자화 비 균일 종종 룩업 테이블을 사용하여 구현. 가능한 모든 바이트 값에 목표 값을 지정하기 위해 256 바이트 배열을 사용할 수 있습니다.

+0

이 코드를 실행하면 {0,1,2,3,4,5} 바이트 값이 {0,0,0,0,0}으로 변환됩니다. 그것은 압축을 달성하고 있습니까? – Shehlina

+0

@Shehlina : 15 미만의 모든 바이트 값은 0으로 양자화됩니다. 따라서 모든 0 바이트가 나타납니다. 차이를 보려면 다른 양자화 또는 더 큰 값을 사용하십시오. –

+0

감사합니다. 나는 더 큰 배열 값 (240,241,242,242)을 사용하면서 여전히 모든 0을 얻었습니다. "USe a different quantization"이라고했을 때 무슨 뜻입니까? 예제를 제공해 줄 수 있습니까? – Shehlina