packbits.js 678 B

1234567891011121314151617181920212223242526
  1. import BaseDecoder from './basedecoder.js';
  2. export default class PackbitsDecoder extends BaseDecoder {
  3. decodeBlock(buffer) {
  4. const dataView = new DataView(buffer);
  5. const out = [];
  6. for (let i = 0; i < buffer.byteLength; ++i) {
  7. let header = dataView.getInt8(i);
  8. if (header < 0) {
  9. const next = dataView.getUint8(i + 1);
  10. header = -header;
  11. for (let j = 0; j <= header; ++j) {
  12. out.push(next);
  13. }
  14. i += 1;
  15. } else {
  16. for (let j = 0; j <= header; ++j) {
  17. out.push(dataView.getUint8(i + j + 1));
  18. }
  19. i += header + 1;
  20. }
  21. }
  22. return new Uint8Array(out).buffer;
  23. }
  24. }