如何使用matlab可视化二进制文件,如图像?

时间:2017-04-11 08:56:30

标签: c# matlab image-processing

我需要像图像一样可视化二进制文件(例如.exe) 此代码将字节打包成c#语言的图像:

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);
}

此代码将二进制文件转换为如下图像:
enter image description here

任何人都可以给我这个代码的Matlab实现吗?

1 个答案:

答案 0 :(得分:1)

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

%Matlab有功能bitget可以做你想要的。然后,您需要将所有位放在方阵中。

[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