I'm trying to read 4 bytes at a time from a binary file. The file was converted to .bin from an image that is 512x512.
The structure of the file has the first 4 bytes the height and the second 4 bytes the width. Then the rest of the file is associated with values for the rest of the pixels.
This is the code I did for conversion in case someone needs it:
package main;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 *
 * @author FFA
 */
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args){
        JFileChooser chooser = new JFileChooser();
        FileFilter filter = new FileNameExtensionFilter("Image File", ImageIO.getReaderFileSuffixes());
        chooser.setFileFilter(filter);
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        if(file == null) System.exit(0);
        File dest = new File(file.getParent(), file.getName().split("\\.")[0] + ".bin");
        dest.delete();
        try(FileOutputStream out = new FileOutputStream(dest, true)){
            BufferedImage image = ImageIO.read(file);
            int width = image.getWidth();
            int height = image.getHeight();
            byte[] data = new byte[width*height];
            int k = 0;
            byte[] widthData = ByteBuffer.allocate(4).putInt(width).array();
            byte[] heightData = ByteBuffer.allocate(4).putInt(height).array();
            out.write(widthData);
            out.write(heightData);
            for(int i=0; i<height;i++){
                for(int j=0; j<width; j++){
                    Color c = new Color(image.getRGB(j, i));
                    int grayValue = (int)Math.round(0.21*c.getRed() + 0.72*c.getGreen() + 0.07*c.getBlue());
                    data[k++] = (byte) grayValue;
                }
            }
            out.write(data);
            JOptionPane.showMessageDialog(null, "Conversion Done");
        }catch(IOException ex){
            JOptionPane.showMessageDialog(null, "Exception: "+ex);
        }
    }
}
The test image is grey Lena 512x512 so only grey-levels.
The whole plan was to convert from image to binary->read it in C++, do some operations, write it in binary and then convert it back to image.
How can I read the binary in C++ and then do operations like convolution in C++?
My plan goes something like this in pseudo-code:
read in 4 bytes
convert to local endian integer representation
assign to width
read in 4 bytes
convert to local endian integer representation
assign to height
for (row = 0; row < height; row++)
{
    add new row vector
    for (col = 0; col < width; col++)
    {
        read byte
        add to current row vector
    }
}
But I have some issues in translating it into C++. Can anyone give me a hand or some hints? Thanks!
Edit:
#include <iostream>
#include <fstream>
int main() {
    FILE *fileptr;
    char *buffer;
    long filelen;
    fileptr = fopen("file.bin", "rb");  
    fseek(fileptr, 0, SEEK_END);          
    filelen = ftell(fileptr);             
    rewind(fileptr);                      
    buffer = (char *)malloc((filelen + 1) * sizeof(char)); 
    fread(buffer, filelen, 1, fileptr); 
    fclose(fileptr);
    system("Pause");
}
I think this should be the code for reading every byte. For reading first 4 bytes I need to read from 1 to filelen/128?
