압축 알고리즘을 작업 중입니다. 8 비트/픽셀의 이미지 파일을 읽고 압축하기 위해이 8 비트 값을 4 비트로 압축합니다. 비트에 대한 유용한 통찰력을 원합니다. 자바로 포장하고 어떻게이 문제에 접근 할 수 있습니까? 나는 해결책이 필요 없다. 그냥 안내.비트 포장 Java
미리 감사드립니다.
압축 알고리즘을 작업 중입니다. 8 비트/픽셀의 이미지 파일을 읽고 압축하기 위해이 8 비트 값을 4 비트로 압축합니다. 비트에 대한 유용한 통찰력을 원합니다. 자바로 포장하고 어떻게이 문제에 접근 할 수 있습니까? 나는 해결책이 필요 없다. 그냥 안내.비트 포장 Java
미리 감사드립니다.
Java에는 숫자 비트를 테스트/조작 할 수있는 연산자가 있습니다. 이것 좀보세요 :
Bitwise and Bit Shift Operators
당신이 비트 더 많은 양을 처리해야하는 경우도 Bitset
클래스가있다.
기본적으로 필요한 것은 비트 연산자로 byte
또는 int
유형의 변수 비트를 테스트/조작하는 것입니다. 로 볼 수
귀하의 압축 루틴은 다음과 같습니다
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,1,2,3,4,5} 바이트 값이 {0,0,0,0,0}으로 변환됩니다. 그것은 압축을 달성하고 있습니까? – Shehlina
@Shehlina : 15 미만의 모든 바이트 값은 0으로 양자화됩니다. 따라서 모든 0 바이트가 나타납니다. 차이를 보려면 다른 양자화 또는 더 큰 값을 사용하십시오. –
감사합니다. 나는 더 큰 배열 값 (240,241,242,242)을 사용하면서 여전히 모든 0을 얻었습니다. "USe a different quantization"이라고했을 때 무슨 뜻입니까? 예제를 제공해 줄 수 있습니까? – Shehlina
실제 압축 알고리즘은 무엇입니까? – harold
@harold 양자화를 사용하겠습니다. 균등 양자화 – Shehlina
괜찮 았던 것입니다. 그렇다면 4 비트 일을 해독하고 (쌍을 취하고'(a << 4) | b'와 결합하십시오), 바이트를 보내십시오. – harold