使用C将BMP图像发送到串口

Sending BMP image to serial port using C

我与 EDC mpos 合作以获得用户签名

现在我将客户签名保存为图像 "sign.bmp" 然后我想将此图像发送到串行端口(我有我的 C# 应用程序来接收数据)。所以我无法将图像发送到串口。这是我尝试过的:

void ReadImageToBuffer(char fileName[],char szTemp[])
{
    FILE *file;
    long fileLength;
    char *buffer;

    lcdCls();
    SignatureHeaderBar();
    lcdDisplay(0,3,DISP_CFONT|DISP_CLRLINE,"file name: %s",fileName);
    lcdFlip();
    kbGetKey();

    // open file
    file = fopen(fileName,"r");

    if (!file)
    {
        lcdCls();
        SignatureHeaderBar();
        lcdDisplay(0,3,DISP_CFONT|DISP_CLRLINE,"Unable to open file %s",fileName);
        lcdFlip();
        kbGetKey();
    }
    else
    {
        lcdCls();
        SignatureHeaderBar();
        lcdDisplay(0,3,DISP_CFONT|DISP_CLRLINE,"file opened");
        lcdFlip();
        kbGetKey();

        // Get file length
        fseek(file, 0, SEEK_END); // Jumpt to the end of file
        fileLength = ftell(file); // Get current byte offset
        fseek(file, 0, SEEK_SET); // Jump back to begin at file

        // allocate memory
        buffer = (char *)malloc((fileLength+1)*sizeof(char));

        if (!buffer)
        {
            lcdCls();
            SignatureHeaderBar();
            lcdDisplay(0,3,DISP_CFONT|DISP_CLRLINE,"Memory error");
            lcdFlip();
            kbGetKey();
        }
        else
        {
            // read file content
            fread(buffer, fileLength, 1, file);

            lcdCls();
            SignatureHeaderBar();
            lcdDisplay(0,3,DISP_CFONT|DISP_CLRLINE,"readed content");
            lcdFlip();
            kbGetKey();
        }

        // close file
        fclose(file);

        lcdCls();
        SignatureHeaderBar();
        lcdDisplay(0,3,DISP_CFONT|DISP_CLRLINE,"szTemp size %d",strlen(szTemp));
        lcdDisplay(0,5,DISP_CFONT|DISP_CLRLINE,"buffer %d",buffer ? 1 : 0);
        lcdDisplay(0,7,DISP_CFONT|DISP_CLRLINE,"signResult size %d",strlen(signResult));
        lcdFlip();
        kbGetKey();

        //void ExternalSerialWrite(char dataByte[]);
        ExternalSerialWrite(buffer);
    }
}

我不是 C 开发人员我只知道基本的 C 和 google "How to..." 在互联网上

所以我的问题是如何将图像发送到串行端口(在我的情况下,我认为我无法以字节形式获取图像数据)

这是我的 ExternalSerialWrite()

void ExternalSerialWrite(char dataByte[])
{
    write(*uartIfd, dataByte, strlen(dataByte));
}

图像是二进制 文件。

所以首先你需要打开它。其次,由于数据是任意值的任意字节,包括嵌入的零(恰好等于字符串空终止符),因此您不能使用 strlen.

等字符串函数

您需要跟踪读取的数据大小(不应该包括分配时添加的 +1),并将该大小作为参数传递给 ExternalSerialWrite 函数.