0

i need to visualize a binary file (for example .exe) like an image
this code to pack the bytes into an image in c# language :

var width = (int)Math.Sqrt(fi.Length * 8);
width = width + 8 - (width % 8);
var length = (int)(fi.Length * 8 / width);

Func<byte, int, Color> getcolor =
        (b, m) => (b & m) == m ? Color.Black : Color.White;

using (var bitmap = new Bitmap(width, length + 1))
{
    var buffer = File.ReadAllBytes(exefile);

    int x = 0, y = 0;
    foreach (var @byte in buffer)
    {
        bitmap.SetPixel(x + 0, y, getcolor(@byte, 0x80));
        bitmap.SetPixel(x + 1, y, getcolor(@byte, 0x40));
        bitmap.SetPixel(x + 2, y, getcolor(@byte, 0x20));
        bitmap.SetPixel(x + 3, y, getcolor(@byte, 0x10));

        bitmap.SetPixel(x + 4, y, getcolor(@byte, 0x8));
        bitmap.SetPixel(x + 5, y, getcolor(@byte, 0x4));
        bitmap.SetPixel(x + 6, y, getcolor(@byte, 0x2));
        bitmap.SetPixel(x + 7, y, getcolor(@byte, 0x1));

        x += 8;
        if (x >= width)
        {
            x = 0;
            y++;
        }
    }

    bitmap.Save(Path.ChangeExtension(exefile, ".tif"), ImageFormat.Tiff);
}

this code convert binary file to image like this :
enter image description here

can anybody give me the Matlab implementation of this code ?

2
  • Can you upload the binary file? Commented Apr 11, 2017 at 9:08
  • @JeruLuke file-upload.com/eztinwfv1700 Commented Apr 11, 2017 at 9:18

1 Answer 1

2

How can I convert a binary file to another binary representation, like an image

%Matlab has the function bitget that does what you want. You then need to put all the bits in a square matrix.

[f,d]=uigetfile('*.*');
fid=fopen([d,filesep,f],'r');
d = fread(fid,inf,'*uint8'); %load all data as bytes.
fclose(fid);
width = sqrt(length(d)*8);
width = width+8-mod(width,8); %make sure width is a multiple of 8
IM = false(width); %binary matrix
x=1;y=1;
for ct = 1:length(d)
    v=bitget(d(ct),[1:8]);
    IM(x:x+7,y)=v;
    x=x+8;
    if x>width
        x=1;y=y+1;
    end
end
imagesc(IM) %display image
Sign up to request clarification or add additional context in comments.

4 Comments

it's work but why the generated image is different in c# and matlab?
can it be that it is rotated by 90 degrees? try this: imagesc(IM')
how can change background and pixel color ? image background likely black and pixels is white.
two options. Change the colormap, or change the bit valueu. easiest is imagesc(~IM) (the tilde is a not-operator, so it flips the bits)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.