0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將framebuffer保存為圖片來檢查內(nèi)容正確性

STM32單片機(jī) ? 來源:STM32單片機(jī) ? 作者:STM32單片機(jī) ? 2022-04-25 10:46 ? 次閱讀

1、前言

客戶在做 GUI 項(xiàng)目開發(fā)時(shí),會(huì)碰到許多顯示相關(guān)的問題。

屏幕花屏是比較嚴(yán)重的問題,如果產(chǎn)品出現(xiàn)花屏,會(huì)嚴(yán)重影響使用體驗(yàn)。正常的 UI 顯示,包括畫圖和將幀緩沖傳輸?shù)狡聊粌蓚€(gè)過程。如果畫圖過程出錯(cuò),那幀緩沖的內(nèi)容就不對(duì)了,傳輸?shù)狡聊缓箫@示也不可能正確。如果畫圖過程正確,而傳輸過程出錯(cuò),雖然幀緩沖的內(nèi)容是對(duì)的,而屏幕接收到的數(shù)據(jù)出錯(cuò)了,那屏幕顯示的內(nèi)容自然也是錯(cuò)誤的。因此在定位顯示錯(cuò)亂、花屏等問題時(shí),需要先判斷是畫圖出錯(cuò)還是傳輸過程出錯(cuò)。

本文會(huì)介紹一種方法,將幀緩沖內(nèi)容導(dǎo)出并保存為圖片,來判斷幀緩沖內(nèi)容是否正確。由于幀緩沖的內(nèi)容為全部像素的 RGB 數(shù)據(jù),在導(dǎo)出后需要借助其它工具將 RGB 數(shù)據(jù)轉(zhuǎn)換為圖片,方便在 PC 上直接查看。

這里可以使用 pythonpillow 包,將 RGB 轉(zhuǎn)換為JPG 圖片。而讀取幀緩沖的過程可以借助 python 的 pyswd 包來實(shí)現(xiàn)。

2、環(huán)境安裝

本機(jī)環(huán)境:Windows10 64bit 安裝 python 3.9.0 (測(cè)試過 3.9.6 正常),檢查系統(tǒng)環(huán)境變量,將 python 添加到 Path中。

下載:https://www.python.org/downloads/

ec3f427c-c3d1-11ec-bce3-dac502259ad0.png

2.1. 安裝 libusb

下載:https://github.com/libusb/libusb/releases

解壓 libusb-1.0.24.7z,將 VS2019/MS64/dll/libusb-1.0.dll 拷貝到 python 安裝目錄,與 python.exe 相同目錄

2.2. 安裝 pyusb

下載:https://pypi.org/project/pyusb/#files

打開 powershell,輸入 pip install pyusb-1.2.1-py3-none-any.whl

2.3. 安裝 Pillow

下載:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pil

打開 powershell,輸入 pip install Pillow-8.3.1-cp39-cp39-win_amd64.whl

2.4. 安裝 pyswd

下載:https://github.com/cortexm/pyswd/releases/tag/v1.0.0

解壓 pyswd-1.0.0.zip,打開 powershell,進(jìn)入 pyswd-1.0.0 目錄,輸入 pythonsetup.py install

3. 將幀緩沖保存為圖片

3.1. 讀取幀緩沖

通過 pyswd,可以創(chuàng)建 stlink 對(duì)象連接到目標(biāo)板,用read_mem 函數(shù)來讀取目標(biāo)板內(nèi)存。

3.2. 保存圖片

從 Pillow 包導(dǎo)入 Image 類,創(chuàng)建圖片對(duì)象,將 pyswd 讀取的 framebuffer 數(shù)據(jù)填充到 image 對(duì)象中并保存實(shí)現(xiàn)代碼如下,保存為 pyswd_rgb2jpg.py 文件。

ec540446-c3d1-11ec-bce3-dac502259ad0.png

4、測(cè)試及小結(jié)

在 L4R9-DK 板上進(jìn)行了測(cè)試

(1) 無 GFXMMU 時(shí),傳給腳本的參數(shù),寬和高為實(shí)際 LCD 的寬和高將 GUI 固件燒錄到開發(fā)板后,屏幕正常顯示。在工程 map 文件中,找到 framebuffer 地址。打開 powershell,執(zhí)行 pyswd_rgb2jpg.py:

ec6040f8-c3d1-11ec-bce3-dac502259ad0.png

(2)開啟 GFXMMU 時(shí),framebuffer 對(duì)應(yīng)為虛擬地址,傳給腳本的參數(shù)中,圖像的寬度要用GFXMMU 像素寬度

ec7b2332-c3d1-11ec-bce3-dac502259ad0.png

在完成環(huán)境安裝后,通過此腳本可方便查看 framebuffer 內(nèi)容。如果出現(xiàn)屏幕花屏的問題,可導(dǎo)出 framebuffer 圖片查看。如果畫圖過程出錯(cuò),則導(dǎo)出的圖片顯示也是錯(cuò)誤的。反之,如果畫圖過程正常,則 framebuffer 內(nèi)容正常,導(dǎo)出的圖片也是正常的,這樣就需要查一下傳輸過程導(dǎo)致的顯示問題。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88318
  • 圖片
    +關(guān)注

    關(guān)注

    0

    文章

    203

    瀏覽量

    15847
  • Framebuffer
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    8023

原文標(biāo)題:工程師筆記|將 framebuffer 保存為圖片來檢查內(nèi)容正確性

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用CY521 EVAL配置CYPD2122,如何文件保存為HEX格式?

    我正在使用 CY521 EVAL 配置 CYPD2122。 一切運(yùn)行正常,我現(xiàn)在希望文件保存為 HEX 格式,以便通過 MiniProg4 進(jìn)行編程。但是,當(dāng)我進(jìn)入\"保存到固件文件
    發(fā)表于 08-12 08:19

    如何保障光伏發(fā)電裝置的安全和適用

    確保光伏發(fā)電裝置安全和質(zhì)量高標(biāo)是重點(diǎn)。安裝正確性驗(yàn)證、系統(tǒng)性能檢查及持續(xù)能源輸出確認(rèn)是基本要求。SEAWARDPV200PV200測(cè)試儀提供高效測(cè)試及診斷,支持無線NFC連接pvmobileAndroid應(yīng)用程序進(jìn)行數(shù)據(jù)傳輸和即時(shí)分析。
    的頭像 發(fā)表于 08-01 15:15 ?149次閱讀
    如何保障光伏發(fā)電裝置的安全<b class='flag-5'>性</b>和適用<b class='flag-5'>性</b>

    高壓電抗器的日常檢查內(nèi)容

    高壓電抗器(也稱為電抗器)是用于電力系統(tǒng)中的一種重要電氣設(shè)備,主要用于調(diào)節(jié)電路中的電流和電壓。它在電力系統(tǒng)中起到限制電流、平衡電壓、穩(wěn)定電力負(fù)荷等作用。日常檢查高壓電抗器時(shí),可以考慮以下內(nèi)容: 1
    的頭像 發(fā)表于 06-25 14:25 ?430次閱讀

    在SimpleCentral_processGATTDiscEvent里面,根據(jù)UUID發(fā)現(xiàn)charHandle,這個(gè)charHandle在UUID改為128bit后是否還是保存為8字節(jié)?

    SimpleCentral_processGATTDiscEvent里面,根據(jù)UUID發(fā)現(xiàn)charHandle,這個(gè)charHandle在UUID改為128bit后是否還是保存為8字節(jié)?還是要保存16字節(jié)?若還是保存8字節(jié)應(yīng)該
    發(fā)表于 05-30 07:55

    STM32MP135如何使用opencv-python或v4l2-ctl打開攝像頭,并保存為圖片?

    行。 但是官方的例程中,直接用v4l推送到media上,直接顯示的又是可以的。 請(qǐng)問我該如何使用opencv-python 或v4l2-ctl打開攝像頭,并保存為圖片?
    發(fā)表于 05-30 06:16

    labview屏幕找圖,返回找到的位置XY坐標(biāo)

    CheckSUM值。 圖中的截圖按鈕點(diǎn)擊后可截取屏幕上你需要的任意位置,盡量只選擇感興趣的區(qū)域,保存為.bmp格式的圖片到路徑。選擇路徑后點(diǎn)擊找圖按鈕即可實(shí)現(xiàn)找圖。也有屏幕找色,OCR,窗口句柄等子vi,感興趣的私聊。
    發(fā)表于 05-11 08:59

    RTT使用unicode編碼,編譯不通過是為什么?

    1、我們?yōu)榱嗽O(shè)備兼容俄語,就需要使用到unicode編碼,字符串保存文件保存為unicode編碼,但是編譯之后出現(xiàn)一大堆錯(cuò)誤。 2、編譯器使用的是rtthread_studio. 3、我們的編譯器不支持unicode編碼嗎?
    發(fā)表于 03-27 08:01

    怎么編寫Framebuffer驅(qū)動(dòng)程序

    Framebuffer 驅(qū)動(dòng)程序框架 分為上下兩層: fbmem.c:承上啟下 實(shí)現(xiàn)、注冊(cè) file_operations 結(jié)構(gòu)體 把 APP 的調(diào)用向下轉(zhuǎn)發(fā)到具體的硬件驅(qū)動(dòng)程序
    的頭像 發(fā)表于 03-22 09:13 ?418次閱讀
    怎么編寫<b class='flag-5'>Framebuffer</b>驅(qū)動(dòng)程序

    PackagingTool_x64_v2.0.1.0圖片轉(zhuǎn)檔打包二進(jìn)制文件合并字庫生成圖片軟件介紹

    相應(yīng)的格式,選擇No Change則不進(jìn)行處理,原檔按二進(jìn)制格式進(jìn)行合并。 【FLASH】可以選擇是要保存為NOR還是NAND使用,該選項(xiàng)變更時(shí)Address欄目值會(huì)重算刷新。 【設(shè)定寫入地址】該功能
    發(fā)表于 02-29 09:30

    如何讀取TC397中所有必要的內(nèi)存區(qū)域并將內(nèi)容保存為十六進(jìn)制文件?

    我正在使用三板上的 TC397 控制器。 控制器已經(jīng)用一些軟件刷新了,但是,不幸的是,該軟件的十六進(jìn)制文件丟失了。 我需要讀取TC397中所有必要的內(nèi)存區(qū)域并將內(nèi)容保存為十六進(jìn)制文件,以便將來
    發(fā)表于 01-25 06:40

    從AD7712讀取的數(shù)據(jù)在C語言中是保存為什么數(shù)據(jù)類型?

    誰用過AD7712嗎,從AD7712讀取的數(shù)據(jù)在C語言中是保存為什么數(shù)據(jù)類型啊,long int 嗎?我用AD7712對(duì)波形進(jìn)行數(shù)字化,AD7712輸出的數(shù)據(jù)應(yīng)該是有正有負(fù)的對(duì)吧?
    發(fā)表于 12-13 09:33

    鴻蒙原生應(yīng)用/元服務(wù)開發(fā)-利用picker選擇器多選相冊(cè)圖片

    前言 在之前的時(shí)候,測(cè)試一個(gè)應(yīng)用進(jìn)入相冊(cè)選擇圖片demo,利用了startAbilityForResult()方法,啟動(dòng)相對(duì)應(yīng)的Ability完成效果,但是這種方法有限制,一次只能獲取一張圖片,在
    發(fā)表于 12-01 17:04

    js文件流轉(zhuǎn)化文件保存

    Blob對(duì)象可以存儲(chǔ)不包含任何特定文件格式的數(shù)據(jù)。 一般情況下,我們需要將文件流轉(zhuǎn)化為Blob對(duì)象,然后再將Blob對(duì)象保存為文件。我們可以通過以下方法創(chuàng)建Blob對(duì)象: var myBlob = new
    的頭像 發(fā)表于 11-27 16:07 ?2877次閱讀

    在MATLAB中如何保存和加載消息

    保存和加載消息 您可以保存消息并存儲(chǔ)內(nèi)容以供以后使用。 例如從訂閱者獲取一條新消息。 posedata = receive(posesub, 10 ) 然后使用MATLAB的保存函數(shù)
    的頭像 發(fā)表于 11-15 15:17 ?311次閱讀

    LVGL怎樣當(dāng)前顯示畫面存儲(chǔ)為圖片

    比如現(xiàn)在有一張 背景圖片 作為壁紙,上面有一些控件,現(xiàn)在想將目前顯示的畫面保存下來,后面這個(gè)保存的畫面當(dāng)做 img 控件(縮放、移動(dòng)等)使用? 目前暫不知如何實(shí)現(xiàn),請(qǐng)教各位大佬指點(diǎn)一
    發(fā)表于 09-26 06:14