decompress LZW tif data by C# - tiff

I got the following information from Tiff file.
ImageWidth Short 2977
ImageLength Short 5613
BitsPerSample Short 2
Compression Short LZW
PhotometricInterpretation Short WhiteIsZero
StripOffsets Long [(22)]
SamplesPerPixel Short 1
RowsPerStrip Short 256
StripByteCounts Long [(22)]
So I think the image data total bytes is 22*256.
How can I decompress the image data for a new bitmap?
Any help will be appreciated.

Related

How to encode raw bytes?

We have a 2D datamatrix barcode which outputs as 12002052 (CR+LF after the value). When scanning into Chrome the barcode is triggering the downloads menu - which I have read from other posts that this is due to the CR+LF. To troubleshoot, we generated a new 2D datamatrix barcode with an online generator for 12002052 which scans successfully in Chrome (doesn't trigger the downloads menu) but when scanned into notepad++ (showing all characters) it shows the exact same output as the original/bad barcode.
I took an image of both the good and bad barcode and uploaded them to a datamatrix decoding website (zxing) and what is interesting is the last value in the "raw bytes" is different for each barcode
bad 2D
Raw text 12002052
Raw bytes 8e 82 96 b6 81
Barcode format DATA_MATRIX
Parsed Result Type TEXT
Parsed Result 12002052
good 2D
Raw text 12002052
Raw bytes 8e 82 96 b6 0b
Barcode format DATA_MATRIX
Parsed Result Type TEXT
Parsed Result 12002052
my question is what exactly are the "raw bytes" and how could I possible encode them to hopefully reverse engineer this and find what is differentiating the 2 barcodes?
I believe that 'Raw bytes' would refer to a byte array. Byte arrays are exactly what they sound like, an array of bytes which are 8 bits each. So, the raw bytes '8e 82 96 b6 0b' refer to hexidecimal representations of each byte.
That said, from the string you have provided - I do not get a corresponding byte array that matches the raw text input provided. (There are plenty of string to byte converters online) Perhaps some character encoding other than ASCII or UTF8 is used in this case.

How to convert 4 bytes hex to decimal manually

I am doing a CTF challenge. I open a broken BMP image file with a hex editor (HexFiend). I highlight 4 bytes in hex 8E262C00. In the bottom, HexFiend shows their value in decimal 2893454. However, I use online hex to decimal converting tool, their value is 2384866304.
Do anyone know how HexFiend comes up with 2893454?. I believe it is a correct answer, because that is the size of the file.
It's the endianness of the file.
A binary encoded file can be encoded with small or big endian. The difference is which succession the single bytes have, i.e. if you read them from left or from right. Note that the order of bits almost always is big endian. The natural way of reading is big ending; the bytes are stores as you would expect it. 8E262C00 becomes 8E 26 2C 00. This file, however, seems to be stored in small endian format. The order is flipped. In other words; 8E262C00 now becomes 00 2C 26 8E which then results in the decimal representation of 2893454
I think it's the Big Endian and Little Endian things.
You should check out this online converting tool, BMP file format is the Little Endian, but i think the tool maybe convert it by Big Endian method.
try it: https://www.scadacore.com/tools/programming-calculators/online-hex-converter/

Are DC coefficients included in every block of a compressed JPEG without exception?

I am reading a compressed JPEG bitstream bitwise to locate the EOB markers.
After each EOB, I would expect to find a Huffman code representing the DC coefficient bit-size.
In the vast majority of cases this I have found this to be true, but occasionally there will be a long (~10 bit) string of 1's followed by a similar string of 0's after an EOB. No DC Huffman code defined in the DHT of the image produces a match. Is it possible that this block has no DC coefficient? Why would this be the case? If not, is there another explanation?
Assuming I am right in thinking that all markers are byte-aligned, there are no restart markers in the image. All bytes with a value of 255 are followed by a zero once the scan has started.

Converting Decimal to binary

I am taking an image file and converting it into binary format. Then I am converting that binary as a decimal format. But according to my algorithm I want to take 50,000 bits at a time following I am explaining my algorithm.
Read an image file from any programming language.
Convert that into binary format(pure 0's and 1's).
Take 50,000 bits at a time and convert it into decimal format(here I am taking only 1000 bits right now)
Convert that decimal again into again binary format.
Now problem is:
How can I take 50,000 bits at time to convert that into binary format
How will I convert that decimal number to binary again.
Here are 2 demos
Converting Binary to decimal https://repl.it/IHMY/1
Converting decimal to binary https://repl.it/IHMY
Thanks
Finally I have done please follow following link:
https://repl.it/IHMY/4
import math;
binary=0b11111111110110001111111111100001
decimal=int(binary)
print(decimal)
print("{0:#b}".format(decimal))

PNG - how to know which is the last byte?

I am creating an AIR app that receives PNG data over the socket and they come in in chunks. How do I know when a byte received is the last byte?
You could decode it as it comes in, continuing until you reach the IEND chunk which marks the end of the png. All you need to do is read the 4 byte length and 4 byte chunk type and then skip ahead length+4 bytes, continuing until the chunk type == IEND. Check out the chunk specification for more info.
http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html