❶ BMP的讀取方法
/*
功能:在圖片的第50行畫一條黑線
為簡化代碼,只支持24位色的圖片
codeblocks下正確運行。VC下需要將二維數組img改為malloc動態分配。需要添加#include stdlib.h。
*/ #include<stdio.h>#include<windows.h>typedefstruct{BYTEb;BYTEg;BYTEr;}RGB;intmain(void){BITMAPFILEHEADERfileHeader;BITMAPINFOHEADERinfoHeader;FILE*pfin=fopen(原始圖像.bmp,rb);FILE*pfout=fopen(修改後的圖像.bmp,wb);//ReadtheBitmapfileheader;fread(&fileHeader,sizeof(BITMAPFILEHEADER),1,pfin);//ReadtheBitmapinfoheader;fread(&infoHeader,sizeof(BITMAPINFOHEADER),1,pfin);//為簡化代碼,只處理24位彩色if(infoHeader.biBitCount==24){intsize=infoHeader.biWidth*infoHeader.biHeight;RGBimg[infoHeader.biHeight][infoHeader.biWidth];//這里有錯誤,尺度改為常量fread(img,sizeof(RGB),size,pfin);//把第50行染成黑色inti=0;for(;i<infoHeader.biWidth;i++){img[50][i].b=img[50][i].g=img[50][i].r=0;}//將修改後的圖片保存到文件fwrite(&fileHeader,sizeof(fileHeader),1,pfout);fwrite(&infoHeader,sizeof(infoHeader),1,pfout);fwrite(img,sizeof(RGB),size,pfout);}fclose(pfin);fclose(pfout);}
❷ 如何批量讀取bmp圖片的原始高和寬
bat和cmd無法直接讀取圖片的寬高數據的,但可以用bat或cmd調用插件dll來讀取(雙擊運行,所得的結果文件為PicSize.txt,奇數行為寬度,偶數行為高度)。
小軟體來讀取就很多了。
用Office的vba宏命令也能讀取。
❸ BMP的讀取方式
讀取16位A/D轉換器的結果
發送控制命令方式
從BMP085 讀取數據的步驟如下:
1)發送模塊地址+W(表示寫操作),如(c) 中的0xEE。
2)送寄存器地址(register address),如(c) 中的第一個0xF6。
3)重新開始IIC 傳輸(Restart)。
4)發送模塊地址+R(表示要進行讀操作),如c 中的0xEF。
5)讀取測量值的高8 位(MSB)。
6)讀取測量值的低8 位(LSB)。
向BMP085 發送命令的步驟如下
1)發送模塊地址+W(表示寫操作),如d中的0xEE。
2)發送寄存器地址(register address),如d 中的第一個0xF4。
3)發送寄存器的值(control register data),如d 中的第二個0xF4。寄
存器的值代表BMP085 要進行的測量方式。不同的值分別代表,測量
溫度;低精度壓力測量;中精度壓力測量;高精度壓力測量。
BMP085 的控製程序編寫思路如圖所示
舉例來說,向 BMP085 寫寄存器地址0xF4 代表要BMP085 進行測量,具體
進行什麼測量(溫度、高精度壓力、中精度壓力還是低精度壓力)要由發向寄存
器的值(control register data)決定,在d 中control register 的值是0xF4。對
照e可以看出,0xF4 代表要進行高精度的壓力測量,需要測量時間25.5ms。
MCU 與BMP085 之間採用IIC 匯流排進行通信,其原理圖如圖所示
❹ 用MFC打開BMP圖片後怎麼讀取圖片的數據
MFC使用的是基於GDI的封裝,在圖片中容易留下鋸齒等等。我試過,在有些圖片下相當失真。建議使用Gdiplus。首先
#include <Gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
然後是初始化:
ULONG_PTR gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
退出程序用
GdiplusShutdown(gdiplusToken);
然後,載入圖片就簡單了,直接Image img(TEXT("C:\\a.bmp"));,並且效果相當好
❺ BMP是什麼文件格式,如何打開BMP文件
BMP是一種圖片格式,可以通過電腦自帶的圖片查看器或繪圖軟體打開,演示電腦系統的版本與windows7類似。
詳情請參考以下步驟:
1.首先,找到目標BMP格式的文件在您的計算機上使用滑鼠並選擇它。
❻ BMP格式圖片的讀取方式
BMP是bitmap的縮寫形式,bitmap顧名思義,就是點陣圖也即Windows點陣圖。它一般由4部分組成:文件頭信息塊、圖像描述信息塊、顏色表(在真彩色模式無顏色表)和圖像數據區組成。在系統中以BMP為擴展名保存。 打開Windows的畫圖程序,在保存圖像時,可以看到三個選項:2色點陣圖(黑白)、16色點陣圖、256色點陣圖和24位點陣圖。這是最普通的生成點陣圖的工具,在這里講解的BMP點陣圖形式,主要就是指用畫圖生成的點陣圖(當然,也可以用其它工具軟體生成)。 現在講解BMP的4個組成部分: 1.文件頭信息塊 0000-0001:文件標識,為字母ASCII碼「BM」。 0002-0005:文件大小。 0006-0009:保留,每位元組以「00」填寫。 000A-000D:記錄圖像數據區的起始位置。各位元組的信息依次含義為:文件頭信息塊大小,圖像描述信息塊的大小,圖像顏色表的大小,保留(為01)。 2.圖像描述信息塊 000E-0011:圖像描述信息塊的大小,常為28H。 0012-0015:圖像寬度。 0016-0019:圖像高度。 001A-001B:圖像的plane總數(恆為1)。 001C-001D:記錄像素的位數,很重要的數值,圖像的顏色數由該值決定。 001E-0021:數據壓縮方式(數值位0:不壓縮;1:8位壓縮;2:4位壓縮)。 0022-0025:圖像區數據的大小。 0026-0029:水平每米有多少像素,在設備無關點陣圖(.DIB)中,每位元組以00H填寫。 002A-002D:垂直每米有多少像素,在設備無關點陣圖(.DIB)中,每位元組以00H填寫。 002E-0031:此圖像所用的顏色數,如值為0,表示所有顏色一樣重要。 3.顏色表 顏色表的大小根據所使用的顏色模式而定:2色圖像為8位元組;16色圖像位64位元組;256色圖像為1024位元組。其中,每4位元組表示一種顏色,並以B(藍色)、G(綠色)、R(紅色)、alpha(32位點陣圖的透明度值,一般不需要)。即首先4位元組表示顏色號1的顏色,接下來表示顏色號2的顏色,依此類推。 4.圖像數據區 顏色表接下來位為點陣圖文件的圖像數據區,在此部分記錄著每點像素對應的顏色號,其記錄方式也隨顏色模式而定,既2色圖像每點佔1位(8位為1位元組);16色圖像每點佔4位(半位元組);256色圖像每點佔8位(1位元組);真彩色圖像每點佔24位(3位元組)。所以,整個數據區的大小也會隨之變化。究其規律而言,可的出如下計算公式:圖像數據信息大小=(圖像寬度*圖像高度*記錄像素的位數)/8。 然而,未壓縮的圖像信息區的大小。除了真彩色模式外,其餘的均大於或等於數據信息的大小。這是為什麼呢?原因有兩個: 1.BMP文件記錄一行圖像是以位元組為單位的。因此,就不存在一個位元組中的數據位信息表示的點在不同的兩行中。也就是說,設顯示模式位16色,在每個位元組分配兩個點信息時,如果圖像的寬度位奇數,那麼最後一個像素點的信息將獨佔一個位元組,這個位元組的後4位將沒有意義。接下來的一個位元組將開始記錄下一行的信息。 2.為了顯示的方便,除了真彩色外,其他的每中顏色模式的行位元組數要用數據「00」補齊為4的整數倍。如果顯示模式為16色,當圖像寬為19時,存儲時每行則要補充4-(19/2+1)%4=2個位元組(加1是因為裡面有一個像素點要獨佔了一位元組)。如果顯示模式為256色,當圖像寬為19時,每行也要補充4-19%4=1個位元組。 還有一點我要申明,當屏幕初始化為16或256色模式時,一定要設置調色板或修正顏色值,否則無法得到正確的圖像顏色。