當前位置:首頁 » 編程語言 » c語言怎麼做點陣圖
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎麼做點陣圖

發布時間: 2023-02-07 13:11:37

『壹』 c語言如何生成點陣圖文件

去了解點陣圖的文件頭結構和點陣圖的數據結構,然後按照這些數據格式寫成數據文件流保存成點陣圖文件就可了。網上有比較多的C語言範例可以參考。

『貳』 c語言 點陣圖操作

對於一個24位色的圖,你直接就拿int(32位機器,長度32位)型二維數組存就行了。肯定能存這個24位數,沒必要把顏色分開存。如果分開存你就用下面的結構體數組的方法吧。建議參考,十分方便實用。

RGB24使用24位來表示一個像素,RGB分量都用8位表示,取值范圍為0-255。注意在內存中RGB各分量的排列順序為:BGR BGR BGR…。通常可以使用RGBTRIPLE數據結構來操作一個像素,它的定義為:
typedef struct tagRGBTRIPLE
{BYTE rgbtBlue; // 藍色分量
BYTE rgbtGreen; // 綠色分量
BYTE rgbtRed; // 紅色分量
} RGBTRIPLE;

『叄』 新手請教:c語言處理點陣圖

你沒有把文件的內容讀進結構體裡面,當然結果不可預料
而且,如果你直接fread(&bmfHeader, sizeof(bmfHeader), 1, fp)也可能會出錯,因為編譯器在編譯結構體的時候,為了加快訪問,會進行結構體的對齊操作。

所以你要逐一欄位地讀取bmp圖像的信息單元

『肆』 用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);
}

『伍』 如何用C語言設計一幅圖片

看你想用什麼工具嘍,處理圖片,首先要了解的是圖片儲存方式,最簡單的要屬bmp,也就是點陣圖,win32自帶有函數可以調用操作點陣圖,它保存的是每個點的顏色與位置,當然二進制碼沒有你想的那麼簡單,使用的好像是調色板模式儲存的。最厲害的壓縮圖片是jpg,現在很多高清的也用它,裡面的代碼方式暫時不知道,不過人家提供的函數介面,可以直接調用,最後處理圖片時,最難的地方就在於放大或縮小,這里需要考慮的問題是模擬技術,往深了可能難懂,簡單點的就是將放大或縮小後改變的區域用原有的顏色進行漸變。 想做出類似畫圖的軟體,還是很麻煩的,畫圖畫線都好說,主要難在添充顏色。

『陸』 誰知道怎麼用C語言或者C++實現多個黑白點陣圖的拼接最後給出有關的代碼,求編程大師幫助、急!!!

首先創建一個內存點陣圖(CreateCompatibleBitmap),創建內存dc(CreateCompatibleDC),將創建好的點陣圖選進內存DC,再將你的一張張圖片畫(BitBlt)到內存dc上,保存或者畫出創建的點陣圖就是你想要的拼接後的圖片。

『柒』 c語言讀取點陣圖編程

我也遇到過類似的問題,點陣圖數據讀取到內存,然後在保存的文件中。
新點陣圖文件,雖然能夠顯示但是圖片內容中存在大量錯誤。
後來發現問題的關鍵在於
fopen(bmpname,"rb");
注意rb標志,不管是只讀標志還是只寫標志,或者讀寫標志後面要加+。
也就是rb+
不加+的標志是針對的文本讀寫的。
加+的標志是針對二進制數據讀寫的。
而點陣圖文件是一種二進制數據。