導航:首頁 > 源碼編譯 > bmp文件編譯

bmp文件編譯

發布時間:2022-08-30 23:50:42

A. VC怎麼把BMP等資源都編譯到EXE文件里去

把資源文件轉成數組。
然後寫到你的文件中。
這個是最基礎的方法。
如果你的工程是帶界面的, 那麼可以當做resource導入到exe中。

B. VC菜鳥,正在學,寫了一個讀取bmp圖像的MFC程序,但是編譯一直出現下面這個提示錯誤,求高手指教啊,,,

是不是代碼里不小心把CalcWindowRect添加了虛函數。
你找找CMy25View所在的頭文件里,類裡面是不是有CalcWindowRect的聲明
有的話把它刪掉。這個函數是CWnd里的

C. 怎麼將.jpg .bmp .gif 圖片轉換成 iso exe res dll 等格式

沒有辦法。jpg、bmp『gif是圖像,而iso、exe、res、dll等是二進制映像,有其特別的含義。
iso是光碟鏡像。
exe是可執行文件。
res是可執行文件的編譯資源
dll是動態鏈接庫。
這些都是完全不一樣的,譬如exe,可以做的事情太多了。顯示圖像等等……不同情況需要不同的方法,討論起來也很費勁。

建議先看看基礎的書吧

D. C語言編寫程序顯示bmp文件

BOOLBitBlt(
HDChdcDest,//點陣圖顯示目標設備環境中
intnXDest,//點陣圖顯示在客戶區的x坐標
intnYDest,//點陣圖顯示在客戶區的y坐標
intnWidth,//點陣圖顯示的寬度
intnHeight,//點陣圖顯示的長度
HDChdcSrc,//源設備環境(包含需要顯示的bmp點陣圖)
intnXSrc,//在當前點陣圖中顯示的開始x位置
intnYSrc,//在當前點陣圖中顯示的開始y位置
DWORDdwRop//映射模式
);


//顯示bmp點陣圖
#include<windows.h>
#include"resource.h"

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
voidDrawBrick();

intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
PSTRszCmdLine,
intiCmdShow)
{
staticTCHARszAppName[]=TEXT("Bmp");
HWNDhwnd;
MSGmsg;
WNDCLASSwndclass;

wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;

if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("ThisprogramrequiresWindowsNT!"),
szAppName,MB_ICONERROR);
return0;
}

hwnd=CreateWindow(szAppName,
TEXT("BmpDemo"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
754,
566,
NULL,
NULL,
hInstance,
NULL);

ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

returnmsg.wParam;
}

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
staticHBITMAPhBitmap;//點陣圖句柄標示點陣圖
staticintcxBitmap,cyBitmap;//點陣圖的長寬
BITMAPbitmap;
HDChdc,hdcMem;
HINSTANCEhInstance;
PAINTSTRUCTps;

switch(message)
{
caseWM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;//獲取窗口的實例句柄

hBitmap=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP1));//將點陣圖載入到內存中

GetObject(hBitmap,sizeof(BITMAP),&bitmap);

cxBitmap=bitmap.bmWidth;//獲取點陣圖的長
cyBitmap=bitmap.bmHeight;//獲取點陣圖的寬

return0;

caseWM_PAINT:
hdc=BeginPaint(hwnd,&ps);

hdcMem=CreateCompatibleDC(hdc);//創建一個兼容於hdc設備環境描述表的hdcMem主要是用於在內存中截圖
SelectObject(hdcMem,hBitmap);//將點陣圖選到hdcMem中

BitBlt(hdc,-1,-1,cxBitmap,cyBitmap,hdcMem,0,0,SRCCOPY);//繪制bmp點陣圖

DeleteDC(hdcMem);
EndPaint(hwnd,&ps);

return0;

caseWM_DESTROY:
DeleteObject(hBitmap);
PostQuitMessage(0);

return0;
}

returnDefWindowProc(hwnd,message,wParam,lParam);
}


最好在VC中編譯

E. 編寫BMP顯示程序時編譯後顯示 LINK : fatal error LNK1168: cannot open Debug/vcProj.exe for writing

有可能是你還開著程序就編譯了,把vcProj.exe 關掉再試一下,實在不行刪掉debug文件夾,編譯時會重新生成

F. VC 實現 輸出 Bmp 圖像中所有像素點的灰度值到文本

//VC++6.0調試通過。但是由於本人最近較忙,所以只做了處理24位點陣圖和32位點陣圖的功能,1、4、8、16位點陣圖從原理上來說是一樣的,不過情況稍微復雜一點。你自己解決吧。

//注意,運行時必須要在控制台(cmd窗口)運行,如果直接在編譯器那裡編譯時,是看不到希望的結果的。有問題的話這兩天可以網路找我,再過幾天就回家了,得明年才回來。

#include<windows.h>
#include<iostream>
#include<fstream>
#include <iomanip>
using namespace std;
/*
點陣圖文件分四個部分:
1.文件頭
2.文件信息頭
3.調色板
4.實際點陣圖數據

//點陣圖文件文件頭,2*3+4*2=14位元組
typedef struct tagBITMAPFILEHEADER
{
WORD bfType;//文件類型,必須為0x424D,由於WORD類型存放數據是先低位元組、再高位元組,所以實際上在判斷時要用0x4d42(見代碼,或者可直接用10進制的數19778),即"BM",'B'=0x42,'M'='0x4d'
DWORD bfSize;//文件大小
WORD bfReserved1;//保留字,必須設置為0,可不考慮,下同
WORD bfReserved2;
DWORD bfOffBits;//文件頭到實際點陣圖數據的偏移位元組數,即前三部分長度之和
}BITMAPFILEHEADER;

//文件信息頭,2*2+4*9=40位元組
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;//此結構長度,為40
LONG biWidth;//圖像寬度,單位為像素
LONG biHeight;//圖像高度,單位為像素
WORD biPlanes;//必須為1
WORD biBitCount;//顏色位數,常用有:1(黑白2色圖)、4(16色圖)、8(256色圖)、24(真彩色圖)。新bmp格式還支持32位(增強型真彩色圖)
DWORD biCompression;//指定點陣圖是否壓縮,有效值:BI_RGB、BI_RLE8、BI_RLE4、BI_BITFIELDS,均為Windows定義好的常量
DWORD biSizeImage;//實際點陣圖數據佔用的位元組數
LONG biXPelsPerMeter;//目標設備水平解析度,單位:像素/米
LONG biYPelsPerMeter;//目標設備垂直解析度,單位:像素/米
DWORD biClrUsed;//圖像實際用的到顏色數,如果為0,則實際用到的顏色數為:2的biBitCount次方
DWORD biClrImportant;//重要的顏色數,為0時表示所有顏色都重要
}BITMAPINFOHEADER;

//點陣圖調色板(真彩色不需要),是一個數組,共biClrUsed個元素,若該值為0,則共有2的biBitCount次方個元素。每個元素是一個顏色表結構:
//顏色表結構
typedef struct tagRGBQUAD
{
BYTE rgbBlue; //藍色分量
BYTE rgbGreen; //綠色分量
BYTE rgbRed; //紅色分量
BYTE rgbReserved;//保留值
}RGBQUAD;
*/
class CBmp
{
public:
//讀圖像文件信息
bool ReadInfo(char FilePath[]);
//寫圖像灰度信息到文本文件
bool WriteToTxt(char FilePath[]);

CBmp();
virtual ~CBmp();

private:
BITMAPFILEHEADER m_sBMFH; //點陣圖文件頭
BITMAPINFOHEADER m_sBMIH; //點陣圖信息頭
RGBQUAD * m_pPalette; //調色板
BYTE * m_pBData; //點陣圖數據
};

CBmp::CBmp()
{
m_pPalette = NULL;
m_pBData = NULL;
}
CBmp::~CBmp()
{
if(m_pPalette!=NULL)
{
delete [] m_pPalette;
m_pPalette = NULL;
}
if(m_pBData!=NULL)
{
delete [] m_pBData;
m_pBData = NULL;
}
}

//讀圖像文件
bool CBmp::ReadInfo(char FilePath[])
{
int nSize; //用來記錄調色板的大小
ifstream fin;
fin.open(FilePath,ios::binary);
if(!fin)
{
cerr<<"Open file error!"<<endl;
return false;
}
//讀取文件頭
fin.read((char *)(&m_sBMFH),sizeof(BITMAPFILEHEADER));
// 判斷是否BMP格式
if(m_sBMFH.bfType!=0x4d42)
{
cout<<"該文件不是BMP格式的文件!"<<endl;
return false;
}
//讀取文件信息頭
fin.read((char *)(&m_sBMIH),sizeof(BITMAPINFOHEADER));
//計算調色板的大小
nSize = m_sBMFH.bfOffBits - sizeof(BITMAPFILEHEADER) - sizeof(BITMAPINFOHEADER);
if(nSize!=0)
{
//讀取調色板
m_pPalette = new RGBQUAD [nSize/4];
fin.read((char *)(m_pPalette),nSize);
}
//讀取圖像數據
m_pBData = new BYTE [m_sBMIH.biSizeImage];
fin.read((char *)(m_pBData),m_sBMIH.biSizeImage);
return true;
}
//寫圖像灰度信息到文本文件
bool CBmp::WriteToTxt(char FilePath[])
{
// 選用的灰度轉換公式不同,所得的結果基本上是一致的,但是會稍有差別。
// Gray = (R*38 + G*75 + B*15) >> 7; //高精度轉灰度公式
// Gray = R*0.299 + G*0.587 + B*0.114 //使用浮點計算,速度較慢
int k = 0,i,j;
int r,g,b;
int Gray;
BYTE *pt;
ofstream fout;
int t=0;
j = strlen(FilePath);
char *TxtFilePath = new char [j+1]; //記錄灰度值的文本文件路徑
TxtFilePath[j-3] = 't';
TxtFilePath[j-2] = 'x';
TxtFilePath[j-1] = 't';
TxtFilePath[j] = '\0';
for(i=j-4;i>=0;i--)
TxtFilePath[i] = FilePath[i] ;
switch(m_sBMIH.biBitCount)
{
case 1: //1、4、8位的點陣圖有調色板,要先讀取調色板,根據索引找到真實的圖像RGB值,再轉換。
cout<<"黑白2色(1位)點陣圖的處理暫未實現!"<<endl;
break;
case 4:
cout<<"16色(4位)點陣圖的處理暫未實現!"<<endl;
break;
case 8:
cout<<"256色(8位)點陣圖的處理暫未實現"<<endl;
break;
case 16: //16位點陣圖無調色板,一般為前5位記錄R值,中6位記錄G值,後5位記錄B值
cout<<"16位點陣圖的處理暫未實現"<<endl;
break;
case 24:
if(m_sBMIH.biWidth*3%4!=0)t=4-m_sBMIH.biWidth*3%4; //點陣圖數據要求每行位元組數必須是4的倍數,不足補齊t
fout.open(TxtFilePath,ios::out);
for(i=m_sBMIH.biHeight-1;i>=0;i--)
{
fout<<"第"<<m_sBMIH.biHeight-i<<"行像素點的灰度值:\n";
for(j=0;j<m_sBMIH.biWidth;j++)
{
pt = m_pBData+i*(m_sBMIH.biWidth*3+t)+3*j ;
r = (int)(*pt);
g = (int)(*(pt+1));
b = (int)(*(pt+2));
// Gray = (r*0.299+g*0.587+b*0.114);
Gray = (r*38 + g*75 + b*15) >> 7;
fout<<setiosflags(ios::left)<<setw(4)<<Gray;
}
fout<<endl;
}
fout.close();
break;
case 32:
//每行位元組數必是4的倍數,所以不用補齊
fout.open(TxtFilePath,ios::out);
for(i=m_sBMIH.biHeight-1;i>=0;i--)
{
fout<<"第"<<m_sBMIH.biHeight-i<<"行像素點的灰度值:\n";
for(j=0;j<m_sBMIH.biWidth;j++)
{
pt = m_pBData+i*(m_sBMIH.biWidth*4+t)+4*j ;
r = (int)(*pt);
g = (int)(*(pt+1));
b = (int)(*(pt+2));
// Gray = (r*0.299+g*0.587+b*0.114);
Gray = (r*38 + g*75 + b*15) >> 7;
fout<<setiosflags(ios::left)<<setw(4)<<Gray;
}
fout<<endl;
}
fout.close();
break;
default:
return false;
}
cout<<"灰度值記錄在文件"<<TxtFilePath<<"中"<<endl;
delete [] TxtFilePath;
return true;
}

int main(int argc,char *argv[])
{
if(argc !=2 )
{
cout<<"輸入參數錯誤,正確形式:\nyourprogram filePath"<<endl;
return 0;
}

CBmp Bitmap;
if( Bitmap.ReadInfo(argv[1]) )
Bitmap.WriteToTxt(argv[1]);
else
{
cout<<"讀取文件出錯"<<endl;
return 0;
}
return 1;
}

G. 用c編譯的bmp點陣圖大小為0 位元組為什麼無法旋轉

沒有什麼奇怪的,就像生產零件一樣,必須按標准來生產。否則你生成的bmp頭肯定不符合標准,其他的軟體根本不承認它是bmp圖片。

H. 用c語言讀取24位點陣圖bmp文件

可以使用C語言標准函數庫中的fopen、fseek、fclose等系列函數來打開bmp點陣圖文件,以及進行相應的處理,下面是一個demo,僅供參考。以下代碼在vc6.0中編譯通過。


#include<stdio.h>
#include<stdlib.h>
#//ThebmpFileHeaderlengthis14
#defineBM19778//TheASCIIcodeforBM
/*Testthefileisbmpfileornot*/
voidbmpFileTest(FILE*fpbmp);
/**/
voidbmpHeaderPartLength(FILE*fpbmp);
/**/
voidBmpWidthHeight(FILE*fpbmp);
//getr,g,bdata
voidbmpDataPart(FILE*fpbmp);
//
voidbmpoutput(FILE*fpout);
unsignedintOffSet=0;//
longwidth;//TheWidthoftheDataPart
longheight;//TheHeightoftheDataPart
unsignedcharr[2000][2000],output_r[2000][2000];
unsignedcharg[2000][2000],output_g[2000][2000];
unsignedcharb[2000][2000],output_b[2000][2000];
intmain(intargc,char*argv[])
{
/*Openbmpfile*/
unsignedchar*fp_temp;
FILE*fpbmp;
FILE*fpout;
fpbmp=fopen("1.bmp","rb");
if(fpbmp==NULL)
{
printf("Openbmpfailed!!! ");
return1;
}
fpout=fopen("out.bmp","wb+");
if(fpout==NULL)
{
printf("Openout.bmpfailed!!! ");
return1;
}

bmpFileTest(fpbmp);//Testthefileisbmpfileornot
bmpHeaderPartLength(fpbmp);//GetthelengthofHeaderPart
BmpWidthHeight(fpbmp);//


//
fseek(fpbmp,0L,SEEK_SET);
fseek(fpout,0L,SEEK_SET);

fp_temp=(unsignedchar*)malloc(OffSet);
fread(fp_temp,1,OffSet,fpbmp);
fwrite(fp_temp,1,OffSet,fpout);

bmpDataPart(fpbmp);//Reservethedatatofile

/*


如果您想對圖片進行處理,請您再這里插入處理函數!!!!!!!!!!!!!!!!!!

*/
bmpoutput(fpout);
fclose(fpbmp);
fclose(fpout);
return0;
}
voidbmpoutput(FILE*fpout)
{
inti,j=0;
intstride;
unsignedchar*pixout=NULL;

stride=(24*width+31)/8;
stride=stride/4*4;
pixout=(unsignedchar*)malloc(stride);

fseek(fpout,OffSet,SEEK_SET);
for(j=0;j<height;j++)
{
for(i=0;i<width;i++)
{
pixout[i*3+2]=output_r[height-1-j][i];
pixout[i*3+1]=output_g[height-1-j][i];
pixout[i*3]=output_b[height-1-j][i];
}
fwrite(pixout,1,stride,fpout);
}
}
voidbmpDataPart(FILE*fpbmp)
{
inti,j=0;
intstride;
unsignedchar*pix=NULL;
FILE*fpr;
FILE*fpg;
FILE*fpb;

if((fpr=fopen("bmpr.txt","w+"))==NULL)
{
printf("Failedtoconstructfilebmpr.txt.!!!");
exit(1);
}
if((fpg=fopen("bmpg.txt","w+"))==NULL)
{
printf("Failedtoconstructfilebmpg.txt.!!!");
exit(1);
}
if((fpb=fopen("bmpb.txt","w+"))==NULL)
{
printf("Failedtoconstructfilebmpb.txt.!!!");
exit(1);
}

fseek(fpbmp,OffSet,SEEK_SET);
stride=(24*width+31)/8;
stride=stride/4*4;
pix=(unsignedchar*)malloc(stride);

for(j=0;j<height;j++)
{
fread(pix,1,stride,fpbmp);
for(i=0;i<width;i++)
{
r[height-1-j][i]=pix[i*3+2];
g[height-1-j][i]=pix[i*3+1];
b[height-1-j][i]=pix[i*3];
output_r[height-1-j][i]=pix[i*3+2];
output_g[height-1-j][i]=pix[i*3+1];
output_b[height-1-j][i]=pix[i*3];
}
}
for(i=0;i<height;i++)
{
for(j=0;j<width-1;j++)
{
fprintf(fpb,"%4d",b[i][j]);
fprintf(fpg,"%4d",g[i][j]);
fprintf(fpr,"%4d",r[i][j]);
}
fprintf(fpb,"%4d ",b[i][j]);
fprintf(fpg,"%4d ",g[i][j]);
fprintf(fpr,"%4d ",r[i][j]);
}

fclose(fpr);
fclose(fpg);
fclose(fpb);

}
voidbmpFileTest(FILE*fpbmp)
{
unsignedshortbfType=0;

fseek(fpbmp,0L,SEEK_SET);//seek_set起始位置
fread(&bfType,sizeof(char),2,fpbmp);
if(BM!=bfType)
{
printf("Thisfileisnotbmpfile.!!! ");
exit(1);
}
}
/**/
voidbmpHeaderPartLength(FILE*fpbmp)
{
fseek(fpbmp,10L,SEEK_SET);
fread(&OffSet,sizeof(char),4,fpbmp);
printf("TheHeaderPartisoflength%d. ",OffSet);
}
/**/
voidBmpWidthHeight(FILE*fpbmp)
{
fseek(fpbmp,18L,SEEK_SET);
fread(&width,sizeof(char),4,fpbmp);
fseek(fpbmp,22L,SEEK_SET);
fread(&height,sizeof(char),4,fpbmp);
printf("TheWidthofthebmpfileis%ld. ",width);
printf("TheHeightofthebmpfileis%ld. ",height);
}
閱讀全文

與bmp文件編譯相關的資料

熱點內容
酷貓系統如何安裝app 瀏覽:635
郵寄伺服器是干什麼用 瀏覽:159
解除電腦加密文件夾 瀏覽:358
androidcheckbox組 瀏覽:546
linux在線安裝軟體 瀏覽:823
如何設置手機安卓版 瀏覽:285
簡歷pdfword 瀏覽:123
鋒雲視頻伺服器網關設置 瀏覽:162
linux伺服器如何查看網卡型號 瀏覽:142
加密相冊誤刪了怎麼恢復 瀏覽:380
安卓代練通怎麼下載 瀏覽:518
知道域名如何查詢伺服器 瀏覽:906
方舟手游怎麼才能進伺服器 瀏覽:289
抖音演算法自動爆音 瀏覽:24
linux修改網卡配置 瀏覽:913
雲伺服器和本地伺服器數據 瀏覽:843
在家如何創業python 瀏覽:225
編譯原理好課 瀏覽:717
python中實數的表示 瀏覽:372
php下載中文名文件 瀏覽:351