欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Vitis?IDE中如何使用第三方庫?libtiff?保存?tiff?文件

 更新時間:2023年07月17日 10:07:04   作者:愛學(xué)習(xí)的諸葛鐵錘  
這篇文章主要介紹了在Vitis?IDE中如何使用第三方庫?libtiff?保存?tiff?文件,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

目的和思路

一個Vitis IDE 裸機(jī)項目,需要將視頻幀無損地保存下來

由于每幀的像素數(shù)據(jù)是 16bit 1通道的 bayer 格式,滿足這一需求的圖像格式似乎只有 tiff 格式開源的tiff 庫是 libtiff,而在 Vitis IDE 裸機(jī)項目中要使用的話就需要交叉編譯Vitis IDE 裸機(jī)的cpu是arm v7 cortex a9,用到的編譯器是 arm-none-eabi在Ubuntu中利用 對應(yīng)版本的 petalinux 自帶的 arm-none-eabi 編譯器編譯libtiff最后Vitis IDE中添加并使用編譯好的第三方庫 libtiff 就能保存 tiff 文件了

libtiff 交叉編譯

下載源碼,解壓到ubuntu配置Makefile命令 ./configure --prefix=/home/hammer/tiff-4.5.0/install --host=arm-none-eabi CFLAGS="-fno-exceptions --specs=nosys.specs -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard"然后 make & make install

編譯好之后的結(jié)果,移到windows中

在這里插入圖片描述

在Vitis IDE中添加libtiff并編譯

打開IDE,新建一個application,右擊properties

在這里插入圖片描述

gcc compiler 配置 Include,path 添加編譯好的 include 路徑

在這里插入圖片描述

gcc linker 配置 Libraries,path 添加 tiff 的 lib 庫,-l 添加 tiffm

在這里插入圖片描述

在這里插入圖片描述

編寫一個 main.c 進(jìn)行測試 libtiff 庫函數(shù)是否能用

#include <stdio.h>
#include <stdlib.h>
#include <tiffio.h>
#define WIDTH 640
#define HEIGHT 480
#define BITS_PER_SAMPLE 8
#define SAMPLES_PER_PIXEL 1
int main() {
    // 假設(shè)幀緩存是一個二維數(shù)組,存儲了像素數(shù)據(jù)
    // 這里使用動態(tài)分配內(nèi)存來模擬幀緩存
    unsigned char** frameBuffer = (unsigned char**)malloc(HEIGHT * sizeof(unsigned char*));
    for (int i = 0; i < HEIGHT; i++) {
        frameBuffer[i] = (unsigned char*)malloc(WIDTH * sizeof(unsigned char));
    }
    // 假設(shè)幀緩存已經(jīng)填充了像素數(shù)據(jù)
    // 這里僅為示例,使用簡單的灰度圖像
    for (int y = 0; y < HEIGHT; y++) {
        for (int x = 0; x < WIDTH; x++) {
            frameBuffer[y][x] = (unsigned char)(x % 256);
        }
    }
    // 創(chuàng)建 TIFF 文件指針
    TIFF* tiff = TIFFOpen("frame.tiff", "w");
    if (tiff == NULL) {
        printf("無法創(chuàng)建 TIFF 文件\n");
        return 1;
    }
    // 設(shè)置 TIFF 參數(shù)
    TIFFSetField(tiff, TIFFTAG_IMAGEWIDTH, WIDTH);
    TIFFSetField(tiff, TIFFTAG_IMAGELENGTH, HEIGHT);
    TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, BITS_PER_SAMPLE);
    TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, SAMPLES_PER_PIXEL);
    TIFFSetField(tiff, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
    TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
    TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, 1);
    // 逐行寫入像素數(shù)據(jù)
    for (int y = 0; y < HEIGHT; y++) {
        if (TIFFWriteScanline(tiff, frameBuffer[y], y, 0) < 0) {
            printf("寫入 TIFF 文件失敗\n");
            TIFFClose(tiff);
            return 1;
        }
    }
    // 關(guān)閉 TIFF 文件
    TIFFClose(tiff);
    // 釋放幀緩存內(nèi)存
    for (int i = 0; i < HEIGHT; i++) {
        free(frameBuffer[i]);
    }
    free(frameBuffer);
    printf("幀緩存已保存為 frame.tiff\n");
    return 0;
}

其實編譯成功就說明可以了

在這里插入圖片描述

遇到的問題

直接 ./configure --prefix=/home/hammer/tiff-4.5.0/install --host=arm-none-eabi 會報錯

報錯1:libc.a undefined reference to _exit

stack overflow 社區(qū)有相關(guān)討論 Makefile linking: undefined reference to _exit

根據(jù)討論結(jié)果,在 CFLAGS 中加上 -fno-exceptions --specs=nosys.specs 即可

報錯2:tiff_app.elf uses VFP register arguments, libtiff.a(tif_close.o) does not

說明編譯的 libtiff.a 不帶VFP浮點運(yùn)算,所以在 CFLAGS 中要加上

 -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard

報錯3:\libtiff.a(tif_aux.o): in function TIFFDefaultTransferFunction: tif_aux.c:(.text+0x5e4): undefined reference to `pow’

在C語言中,pow函數(shù)是位于數(shù)學(xué)庫中的一個標(biāo)準(zhǔn)函數(shù),說明缺少對數(shù)學(xué)庫的鏈接所以在 Libraries 部分,添加鏈接標(biāo)志 -lm

到此這篇關(guān)于在Vitis IDE中使用第三方庫 libtiff 保存 tiff 文件的文章就介紹到這了,更多相關(guān)Vitis IDE使用 libtiff 保存 tiff 文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中的函數(shù)指針學(xué)習(xí)筆記

    C語言中的函數(shù)指針學(xué)習(xí)筆記

    這篇文章主要介紹了C語言中的函數(shù)指針的一些學(xué)習(xí)知識點記錄,文中作者整理了一些比較interesting的函數(shù)指針用法,需要的朋友可以參考下
    2016-04-04
  • 實例詳解C++中指針與引用的區(qū)別

    實例詳解C++中指針與引用的區(qū)別

    引用是C++引入的重要機(jī)制(C語言沒有引用),它使原來在C中必須用指針來實現(xiàn)的功能有了另一種實現(xiàn)的選擇,在書寫形式上更為簡潔,那么引用的本質(zhì)是什么,它與指針又有什么關(guān)系呢?這篇文章主要給大家介紹了關(guān)于C++中指針與引用的區(qū)別,需要的朋友可以參考下
    2021-07-07
  • C語言中字符串常用操作總結(jié)

    C語言中字符串常用操作總結(jié)

    C語言是一種非常流行的編程語言,它支持各種數(shù)據(jù)類型,包括整數(shù)、浮點數(shù)、字符和字符串等,本文將介紹?C語言中字符串的相關(guān)知識,包括字符串的定義、初始化、賦值等,需要的可以參考一下
    2023-05-05
  • c++ 虛函數(shù)與純虛函數(shù)的區(qū)別(深入分析)

    c++ 虛函數(shù)與純虛函數(shù)的區(qū)別(深入分析)

    本篇文章是對c++中虛函數(shù)與純虛函數(shù)的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)簡易版掃雷小游戲

    C語言實現(xiàn)簡易版掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡易版掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++概念重載、覆蓋、隱藏的使用說明

    C++概念重載、覆蓋、隱藏的使用說明

    本篇文章介紹了,在C++中概念重載、覆蓋、隱藏的使用分析說明。需要的朋友參考下
    2013-05-05
  • Linux網(wǎng)絡(luò)編程之socket文件傳輸示例

    Linux網(wǎng)絡(luò)編程之socket文件傳輸示例

    這篇文章主要介紹了Linux網(wǎng)絡(luò)編程之socket文件傳輸示例,對于基于Linux平臺的C程序員來說有一定的借鑒價值,需要的朋友可以參考下
    2014-08-08
  • 使用C語言繪制統(tǒng)計圖中的餅圖

    使用C語言繪制統(tǒng)計圖中的餅圖

    常用的統(tǒng)計圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖,本文主要為大家詳細(xì)介紹了如何使用使用C語言繪制統(tǒng)計圖中的餅圖,希望對大家有所幫助
    2024-02-02
  • 深入理解C語言的new[]和delete[]

    深入理解C語言的new[]和delete[]

    new和delete既是C++中的關(guān)鍵字也是一種特殊的運(yùn)算符。這篇文章主要介紹了C++的new和delete詳解,需要的朋友可以參考下
    2021-09-09
  • 利用c++寫一個簡單的推箱子小游戲

    利用c++寫一個簡單的推箱子小游戲

    推箱子想必是很多人童年時期的經(jīng)典游戲,我們依舊能記得抱個老人機(jī)娛樂的場景,下面這篇文章主要給大家介紹了關(guān)于如何利用c++寫一個簡單的推箱子小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評論