伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux開發_介紹BMP圖片上下翻轉、添加水印

DS小龍哥-嵌入式技術 ? 2022-09-17 15:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 介紹BMP圖片上下翻轉、添加水印、通過學習BMP圖片結構學習文件編程。

BMP圖片練習文件操作(專題練習)

1.?BMP圖片數據取模,模擬圖片取模軟件。(選擇16位或者24位取模方式)

16位。

2.?BMP圖片放大縮小,根據輸入的尺寸放大縮小圖片。

3.?實現圖片4種翻轉效果: 上、下、左、右。

4.?給圖片的指定位置添加水印

要求: 在圖片的任意位置,添加任意的文字水印。

比如: xxx路口 20181008 11:04

將字庫加入: ASCII和中文GBK字庫

??目錄作業: 拷貝目錄下所有文件(指定后綴的文件)到指定目錄下,考慮一層目錄。

多層目錄拷貝。

??Makefile作業: 使用Makefile建立工程,只需要寫一個Makefile文件。

(1)BMP圖片上下翻轉實現

#include 
#include 
#include 
#include 

/* 必須在結構體定義之前使用,這是為了讓結構體中各成員按1字節對齊 */
#pragma pack(1)

/*需要文件信息頭:14個字節 */
struct tagBITMAP_FILE_HEADER
{
	unsigned short bfType;   //保存圖片類似。 'BM' -- 0x4d42
	unsigned int  bfSize;      //圖片的大小
	unsigned short bfReserved1;
	unsigned short bfReserved2;
	unsigned int  bfOffBits;  //RGB數據偏移地址
};

/* 位圖參數信息 */
struct tagBITMAP_INFO_HEADER { 
	unsigned long  biSize;      //結構體大小
	unsigned long  biWidth;		//寬度
	unsigned long  biHeight;	//高度
	unsigned short biPlanes;
	unsigned short biBitCount;	//顏色位數
	unsigned long  biCompression;
	unsigned long  biSizeImage;
	unsigned long  biXPelsPerMeter;
	unsigned long  biYPelsPerMeter;
	unsigned long  biClrUsed;
	unsigned long  biClrImportant;
};

/*
函數功能: BMP圖片翻轉
函數參數:
		char *src_BmpFile     :BMP圖片源文件
		char *new_BmpFile     :新文件
返回值  :0表示成功,其他值失敗
*/
int BMPOverturn(char *src_BmpFile,char *new_BmpFile)
{
	/*1. 打開源文件*/
	int err=0;
	FILE *bmp_file=fopen(src_BmpFile,"rb");
	if(bmp_file==NULL)
	{
		err=1;
		goto ERROR;
	}
	
	/*2. 圖片參數獲取*/
	struct tagBITMAP_FILE_HEADER src_head; //BMP文件頭
	memset(&src_head,0,sizeof(struct tagBITMAP_FILE_HEADER));
	if(fread(&src_head,1,sizeof(struct tagBITMAP_FILE_HEADER),bmp_file)!=sizeof(struct tagBITMAP_FILE_HEADER))
	{
		err=2;
		goto ERROR;
	}
	
	if(src_head.bfType!=0x4d42) //判斷類型
	{
		err=3;
		goto ERROR;
	}
	
	struct tagBITMAP_INFO_HEADER src_info; //BMP圖像參數
	memset(&src_info,0,sizeof(struct tagBITMAP_INFO_HEADER));
	if(fread(&src_info,1,sizeof(struct tagBITMAP_INFO_HEADER),bmp_file)!=sizeof(struct tagBITMAP_INFO_HEADER))
	{
		err=4;
		goto ERROR;
	}
	
	if(src_info.biBitCount!=24) //判斷顏色位數
	{
		err=5;
		goto ERROR;
	}
	
	/*3. 創建新圖片*/
	FILE *new_file=fopen(new_BmpFile,"wb");
	if(new_file==NULL)
	{
		err=6;
		goto ERROR;
	}
	
	/*3.1 創建BMP文件頭*/
	fwrite(&src_head,1,sizeof(struct tagBITMAP_FILE_HEADER),new_file);
	
	/*3.2 創建BMP圖像參數*/
	fwrite(&src_info,1,sizeof(struct tagBITMAP_INFO_HEADER),new_file);

	/*3.3 實現圖片上下翻轉*/
	int i;
	int lineByte=src_info.biWidth*3; //一行總字節數量
	if(lineByte%4)lineByte++;
	
	int offset=lineByte*(src_info.biHeight-1)+src_head.bfOffBits;
	char *data_p=malloc(lineByte);
	if(data_p==NULL)
	{
		err=7;
		goto ERROR;
	}
	
	for(i=0;i;i++)>

(2)BMP圖片水印添加

#include 
#include 
#include 
#include 

/* 必須在結構體定義之前使用,這是為了讓結構體中各成員按1字節對齊 */
#pragma pack(1)

/*需要文件信息頭:14個字節 */
struct tagBITMAP_FILE_HEADER
{
	unsigned short bfType;   //保存圖片類似。 'BM' -- 0x4d42
	unsigned int  bfSize;      //圖片的大小
	unsigned short bfReserved1;
	unsigned short bfReserved2;
	unsigned int  bfOffBits;  //RGB數據偏移地址
};

/* 位圖參數信息 */
struct tagBITMAP_INFO_HEADER { 
	unsigned long  biSize;      //結構體大小
	unsigned long  biWidth;		//寬度
	unsigned long  biHeight;	//高度
	unsigned short biPlanes;
	unsigned short biBitCount;	//顏色位數
	unsigned long  biCompression;
	unsigned long  biSizeImage;
	unsigned long  biXPelsPerMeter;
	unsigned long  biYPelsPerMeter;
	unsigned long  biClrUsed;
	unsigned long  biClrImportant;
};

/*--  文字:  水  --*/
/*--  宋體42;  此字體下對應的點陣為:寬x高=56x56   --*/
const unsigned char font0[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,
0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
0x7C,0x00,0x0C,0x00,0x00,0x00,0x00,0x7C,0x00,0x0E,0x00,0x00,0x00,0x00,0x7E,0x00,
0x1F,0x00,0x00,0x00,0x00,0x7E,0x00,0x3F,0x80,0x00,0x00,0x00,0x7E,0x00,0x7F,0xC0,
0x00,0x00,0x18,0x7E,0x00,0xFE,0x00,0x00,0x00,0x3C,0x7F,0x00,0xF8,0x00,0x1F,0xFF,
0xFE,0x7F,0x03,0xF0,0x00,0x0F,0xFF,0xFF,0x7F,0x87,0xC0,0x00,0x07,0x80,0x7E,0x7F,
0x8F,0x80,0x00,0x00,0x00,0x7C,0x7F,0x9F,0x00,0x00,0x00,0x00,0x7C,0x7F,0xFC,0x00,
0x00,0x00,0x00,0xF8,0x7D,0xF8,0x00,0x00,0x00,0x00,0xF8,0x7D,0xE0,0x00,0x00,0x00,
0x00,0xF8,0x7C,0xE0,0x00,0x00,0x00,0x01,0xF0,0x7C,0xF0,0x00,0x00,0x00,0x01,0xF0,
0x7C,0xF0,0x00,0x00,0x00,0x01,0xF0,0x7C,0x78,0x00,0x00,0x00,0x03,0xE0,0x7C,0x7C,
0x00,0x00,0x00,0x03,0xE0,0x7C,0x3C,0x00,0x00,0x00,0x07,0xC0,0x7C,0x3E,0x00,0x00,
0x00,0x07,0xC0,0x7C,0x1E,0x00,0x00,0x00,0x0F,0x80,0x7C,0x1F,0x00,0x00,0x00,0x0F,
0x80,0x7C,0x0F,0x80,0x00,0x00,0x1F,0x00,0x7C,0x0F,0xC0,0x00,0x00,0x1E,0x00,0x7C,
0x07,0xE0,0x00,0x00,0x3E,0x00,0x7C,0x03,0xE0,0x00,0x00,0x3C,0x00,0x7C,0x03,0xF0,
0x00,0x00,0x78,0x00,0x7C,0x01,0xFC,0x00,0x00,0xF8,0x00,0x7C,0x00,0xFE,0x00,0x00,
0xF0,0x00,0x7C,0x00,0xFF,0x00,0x01,0xE0,0x00,0x7C,0x00,0x7F,0xC0,0x03,0xC0,0x00,
0x7C,0x00,0x3F,0xE0,0x07,0x80,0x00,0x7C,0x00,0x1F,0xFC,0x0F,0x00,0x00,0x7C,0x00,
0x0F,0xFC,0x1E,0x00,0x00,0x7C,0x00,0x07,0xE0,0x1C,0x00,0x00,0x7C,0x00,0x03,0xC0,
0x38,0x00,0x7F,0xFC,0x00,0x01,0x80,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x01,0xF0,
0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/*--  文字:  印  --*/
/*--  宋體42;  此字體下對應的點陣為:寬x高=56x56   --*/
const unsigned char font1[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,
0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,
0x00,0x00,0x00,0xFF,0xE0,0x00,0x03,0x00,0x01,0x87,0xF8,0x03,0x80,0x03,0xC0,0x01,
0xFF,0xC0,0x03,0xFF,0xFF,0xE0,0x01,0xFC,0x00,0x03,0xFF,0xFF,0xE0,0x01,0xE0,0x00,
0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,
0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,
0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,
0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,
0xC0,0x07,0xC0,0x01,0xE0,0x03,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x07,0x83,0xC0,0x07,
0xC0,0x01,0xFF,0xFF,0xC3,0xC0,0x07,0xC0,0x01,0xFF,0xFF,0xE3,0xC0,0x07,0xC0,0x01,
0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,
0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,
0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,
0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,
0x00,0x03,0xC0,0x07,0xC0,0x01,0xE0,0x00,0x73,0xC0,0x07,0xC0,0x01,0xE0,0x03,0xF3,
0xC0,0x07,0xC0,0x01,0xE0,0x3F,0x83,0xC0,0x07,0xC0,0x01,0xE1,0xFE,0x03,0xC7,0xFF,
0xC0,0x01,0xFF,0xF0,0x03,0xC1,0xFF,0xC0,0x03,0xFF,0xC0,0x03,0xC0,0x7F,0x80,0x03,
0xFF,0x00,0x03,0xC0,0x1F,0x00,0x01,0xFC,0x00,0x03,0xC0,0x0E,0x00,0x01,0xF0,0x00,
0x03,0xC0,0x00,0x00,0x00,0xE0,0x00,0x03,0xC0,0x00,0x00,0x00,0x40,0x00,0x03,0xC0,
0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,
0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,
0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,
0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/*
函數功能: 針對BMP圖片實現的畫點函數
函數參數:
	char *bmp_mem  :表示BMP圖片RGB顏色數據的首地址
	int x
	int y
	int color	   :畫點的顏色值
	
	BMP_DrawPoint(bmp_mem,100,100,0);
*/
unsigned int bmp_Width; //保存BMP圖片的寬度
void BMP_DrawPoint(unsigned char *bmp_mem,int x,int y,int color)
{
	unsigned char *rgb=(unsigned char *)(bmp_mem+y*bmp_Width*3+x*3);
	*rgb=color>>0&0xFF;
	*(rgb+1)=color>>8&0xFF;
	*(rgb+2)=color>>16&0xFF;
}

/*
函數功能: 在BMP圖片的指定位置添加字符串
說明: 傳入的取模字體必須是8的倍數(寬度和高度是相等)
*/
void BMP_ShowString(unsigned char *bmp_mem,unsigned char *font,int x,int y,int size,int color)
{
	int i,j;
	int x0=x;
	unsigned char data;
	for(i=0;i

學習Makefile

1.?學習什么是目標文件: 該如何定義

2.?學習什么是目標依賴文件:該如何定義

3.?Makefile本身推導規則: 如何根據目標和目標依賴文件去進行編譯生成目標。

4.?學習特殊變量的定義和功能使用: VPATH\ CC\ CFLAGS

5.?條件判斷語句、常用的幾個函數 $(Shell ls)。

6.?自動化編譯的符號: $@ $< $^ %

make <參數> -n表示調試不編譯 -s 隱藏命令的輸出

關于make命令運用時傳遞的參數:

make abc=123 app -ns

Shell腳本編程

Shell腳本: 是一個編程語言(腳本類型的編程語言、解釋類型編程語言)

變量、for循環、while循環、if語言、switch語句、函數….

??Linux開發: 側重于驅動開發、側重于運維開發。

;i++)>
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • BMP
    BMP
    +關注

    關注

    0

    文章

    48

    瀏覽量

    17792
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    20443
  • Shell腳本
    +關注

    關注

    0

    文章

    36

    瀏覽量

    8540
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    EspeedGrab圖像采集軟件介紹(Cameralink轉USB采集)

    /14/16; 黑白、彩色、Bayer;可見、紅外、紫外;線陣、面陣; 2 圖像存儲錄制 逐幀、跳幀、定時等多模式存儲; BMP、JPEG、RAW、AVI等,視頻或者圖片皆可以。 3 特殊格式支持
    發表于 12-23 17:26

    【免費送書】成為硬核Linux開發者:《Linux 設備驅動開發(第 2 版)》

    Linux系統的設備驅動開發,一直給人門檻較高的印象,主要因內核機制抽象、需深度理解硬件原理、開發調試難度大所致。2021年,一本講解驅動開發的專著問世即獲市場青睞,暢銷近萬冊——這便
    的頭像 發表于 11-18 08:06 ?1663次閱讀
    【免費送書】成為硬核<b class='flag-5'>Linux</b><b class='flag-5'>開發</b>者:《<b class='flag-5'>Linux</b> 設備驅動<b class='flag-5'>開發</b>(第 2 版)》

    【書籍評測活動NO.67】成為硬核Linux開發者:《Linux 設備驅動開發(第 2 版)》

    星期內提交不少于2篇試讀報告要求300字以上圖文并茂。4、試讀報告發表在電子發燒友論壇>>社區活動專版標題名稱必須包含 【「Linux 設備驅動開發(第 2 版)」閱讀
    發表于 11-17 17:52

    基于開源鴻蒙的圖片編輯開發樣例(2)

    本期內容介紹基于開源鴻蒙在RK3568上開發圖片編輯樣例的全流程,分為上篇和下篇,本篇為下篇,主要介紹標記、保存圖片功能。
    的頭像 發表于 10-31 09:19 ?3305次閱讀
    基于開源鴻蒙的<b class='flag-5'>圖片</b>編輯<b class='flag-5'>開發</b>樣例(2)

    基于開源鴻蒙的圖片編輯開發樣例(1)

    本期內容介紹基于開源鴻蒙在RK3568上開發圖片編輯樣例的全流程,分為上篇和下篇,本篇為上篇,主要介紹添加相冊圖片、編譯
    的頭像 發表于 10-31 09:16 ?3176次閱讀
    基于開源鴻蒙的<b class='flag-5'>圖片</b>編輯<b class='flag-5'>開發</b>樣例(1)

    ElfBoard技術貼|如何在【RK3588】ELF 2開發板用戶空間更換開機Logo

    傳統修改開發板開機Logo的方式需要重新編譯內核,流程復雜且耗時。本文介紹了一種創新方案:通過預先在存儲中劃分專用的Logo分區,允許用戶直接在文件系統中更新Logo圖片文件,這極大地簡化了定制流程
    的頭像 發表于 10-29 11:12 ?1300次閱讀
    ElfBoard技術貼|如何在【RK3588】ELF 2<b class='flag-5'>開發</b>板用戶空間更換開機Logo

    商品圖片批量上傳接口設計與實現

    ? 在電商平臺或內容管理系統中,商品圖片的高效管理是核心需求之一。批量上傳接口允許用戶一次性上傳多張圖片,顯著提升操作效率。本文將逐步介紹如何設計并實現一個可靠的商品圖片批量上傳接口,
    的頭像 發表于 10-13 15:25 ?533次閱讀

    創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—Linux-RT應用開發案例

    Linux-RT 性能;還提供 rt_gpio_ctrl(實時線程控制 LED 翻轉)、rt_input(實時線程監聽按鍵觸發 LED)兩個開發案例,含測試、編譯步驟與關鍵代碼,為評估板 L
    的頭像 發表于 09-25 17:25 ?836次閱讀
    創龍 瑞芯微 RK3588 國產2.4GHz八核 工業<b class='flag-5'>開發</b>板—<b class='flag-5'>Linux</b>-RT應用<b class='flag-5'>開發</b>案例

    RK3506開發Linux開發板極致性價比之選

    RK3506開發Linux開發板極致性價比之選瑞芯微RK3506開發板,3核Cortex-A7@1.5GHz+Cortex-M0,Linux
    的頭像 發表于 09-11 16:26 ?3777次閱讀
    RK3506<b class='flag-5'>開發</b>板<b class='flag-5'>Linux</b><b class='flag-5'>開發</b>板極致性價比之選

    Linux 應用開發手冊

    T507linux應用開發手冊
    發表于 08-22 17:01 ?15次下載

    國產!全志T113-i 雙核Cortex-A7@1.2GHz 工業開發板—Linux-RT應用開發案例

    ? 前??言 本文適用開發環境如下: Windows開發環境:Windows 7 64bit、Windows 10 64bit 虛擬機:VMware15.5.5 Linux開發環境
    的頭像 發表于 07-30 10:33 ?923次閱讀
    國產!全志T113-i 雙核Cortex-A7@1.2GHz 工業<b class='flag-5'>開發</b>板—<b class='flag-5'>Linux</b>-RT應用<b class='flag-5'>開發</b>案例

    產品圖片上傳API接口

    ? 在電商平臺、內容管理系統或移動應用中,產品圖片上傳API接口是核心功能之一。它允許用戶或第三方應用通過HTTP請求將圖片文件上傳到服務器,實現產品圖像的快速添加和管理。本文將逐步介紹
    的頭像 發表于 07-25 14:30 ?812次閱讀
    產品<b class='flag-5'>圖片</b>上傳API接口

    鴻蒙5開發寶藏案例分享---一多開發實例(圖片美化)

    ?【鴻蒙開發寶藏案例分享】一次搞定多端適配的圖片美化應用開發思路!? Hey小伙伴們~ 今天在翻鴻蒙文檔時挖到一個超實用的大寶藏!原來官方早就悄悄提供了超多\"一多開發\"的實戰
    發表于 06-03 16:09

    在官網上下載的在linux之下使用的canmvide如何安裝?

    在官網上下載的在linux之下使用的canmvide如何安裝,有沒有安裝手冊呢? 期待結果和實際結果
    發表于 04-29 06:24

    Linux文件系統打包及鏡像制作,觸覺智能RK3562開發板演示

    本文介紹Linux開發板文件系統打包及鏡像制作的方法,演示Linux文件系統打包及鏡像制作,適用于想將配置好的系統環境打包成鏡像批量燒錄。觸覺智能RK3562
    的頭像 發表于 04-28 16:45 ?1136次閱讀
    <b class='flag-5'>Linux</b>文件系統打包及鏡像制作,觸覺智能RK3562<b class='flag-5'>開發</b>板演示