jimp-dev / jimp-dev/jimp

Jimp browser convert my 16 bit grayscale into 8bit RGBA

Open
#988 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
14.7k
Forks
777
PR merge metrics
No merged PRs in 30d

Description

Jimp browser convert my 16 bit grayscale into 8 bit RGBA image (8x4=32 bits) because R=G=B= my original gray, quality is lost as my gray was in 16 bits but R or G or B are in 8 bits. The convertion made by jimp is `>> 8`

The [tested image](https://i.stack.imgur.com/8am9t.png) is PNG: 640x480 16 bit grayscale
ImageMagick:
```
$ identify 1305031468.188327.png
1305031468.188327.png PNG 640x480 640x480+0+0 16-bit Grayscale Gray 131604B 0.000u 0:00.000
```

# Expected Behavior
`jimpSrc.bitmap.data=Uint8Array(614400) [0, 0, 0, 0, 32, 21, 32, 21, 34, 137,...]`
or
`jimpSrc.bitmap.data=Uint16Array(307200) [0, 0, 8213, 8213, 8841, ...]`
(32*256+21=8213 for the 3rd pixel)

# Current Behavior
`jimpSrc.bitmap.data=Uint8Array(1228800) [0, 0, 0, 255, 0, 0, 0, 255, 32, 32, 32, 255, 32, 32, 32, 255, ...]`
with thus R=G=B=my_gray>>8 and A=255
And thus for the 3rd pixel `32<<8=8192 != 8213`

## Steps to Reproduce

https://jsfiddle.net/remmel/yvmketx0/

```

```
```
var jimpSrc = await Jimp.read("https://uc89daeff68107502f68265ef5a0.previews.dropboxusercontent.com/p/thumb/ABEy1DSpxsZQI8_1ZJrnTQ0Sxz6K4GVfKpeeAT3VgwsYdF3iM1I16J3k1dEBHcM4mW8_JjshtmTZVP05bZbtm3anqKB2bUK9TYMOk7DvW2bWO-SfZbaGhDfkJlmtbfuQvnp4WetRA2ptiCkOjtYuIfJHDrtKnjnHtGnSmgWQs_fH8z-An4dT94J6wt-RVK9wc9hSXcl-yEP1_GbY-2oMd0OfibSnbn1TKW27uAMQ8wPj-AMH7meBjznSr3jUPrn_WZW5GeFAkVi3UUUERAxmucOwloPHICKxBDg6v098GwxgvOE92cJGweOKMizxxUOdQBm1Wx8ehHMpb8Ps59DcuysqBlwDtJvdYktsxmzJ9XhPo7Bmu5RDkoIcWkpY8-HalYT29jBoIV2MhMNk8B86jVKy/p.png?fv_content=true&size_mode=5");
console.log(jimpSrc.bitmap.data)
```

# Debugging
Debugging the js code:
- unfilteredData is correct (returned by `FilterSync.process(inflatedData, metaData);`) because `unfilteredData=Uint8Array(614400) [0, 0, 0, 0, 32, 21, 32, 21, 34, 137,...]`
- So it seems that method dataToBitMap `var bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);` is incorrect

** Version **
- Jimp Version: 16.1
- Operating System: Ubuntu 20.04 LTS
- Node version: Chromium Version 88.0.4324.182

FYI, this bug is related with [Stackoverflow question](https://stackoverflow.com/questions/66308827/how-to-load-16-bits-grayscale-png-in-opencv-js) and the PNG 16bit grayscale comes from [TUM and represents depth maps](https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.