簡體   English   中英

使用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,並且在互聯網上搜尋“如何...”

所以我的問題是如何將圖像發送到串行端口(就我而言,我認為我無法以字節為單位獲取圖像數據)

這是我的ExternalSerialWrite()

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

圖像是二進制文件。

因此,首先您需要這樣打開它。 其次,由於數據是任何值的任意字節,包括嵌入的零(恰好等於字符串null終止符),因此不能使用諸如strlen字符串函數。

您需要跟蹤讀取的數據大小(在分配時不應包括您添加的+1 ),並將該大小作為參數傳遞給ExternalSerialWrite函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM