A. 请问如何使用纯c语言读取文件中的图片,并将图片存储在二维数组中
1、使用双层循环语句,就可以依次把数据顺序读入到一个二维数组当中了。2、例程:#include#include#defineMAXLINE3#defineMAXCOLUMN10voidmain(void){FILE*fp;//文件指针chararr[MAXLINE][MAXCOLUMN]={0};//定义3行10列的二维数组并初始化inti=-1;if((fp=fopen("./test/filename.txt","r"))==NULL){//打开txt文件perror("Fileopenerror!\n");return;}while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL)//读取一行并存到arr数组printf("%d:",i);//打印行号//puts(arr[i]);char*subarr=strtok(arr[i],"");//以空格为分隔符从arr[i]中获得字串while(subarr!=NULL){data[i][j]=atoi(subarr);//将字串转为int型数据存入data数组printf("%d\t",data[i][j]);//打印data[i][jsubarr=strtok(NULL,"");//继续获得arr[i]中的字串j++;//data数组列加一}printf("\n");}//循环完毕后,所有数据已在data数组中printf("\n");fclose(fp);//关闭指针}
B. 求助,用C语言定义动态二维数组读取图像问题
可以按照下面步骤进行定义二维数组并输出:
1 定义二维指针。
2 确定数组维数,即行数和列数。
3 申请行数个一维指针大小空间,并赋值给二维指针。
4 对于每个一维指,申请列数个元素的空间,并赋值给对应的一维指针。
5 输入或赋值数据。
6 使用双重循环,逐个范围存储单元并输出。
7 逐个释放一维指针上的内存。
8 释放二维指针上的内存。
以整型二维数组为例:
下面的代码,实现先输入二维数组的行数m和列数n,并再输入m*n个整型数据存到动态二维数组中。最后输出所有二维数组的元素值。
#include <stdio.h> //包含输入输出函数
#include <stdlib.h>//包含动态内存分配函数。
int main()
{
int **p; //定义二维指针。
int m, n;//行数和列数。
int i,j;
scanf("%d%d", &m, &n); //输入行数和列数。
if(m <= 0 || n <= 0) return -1; //行数或列数非法。
p = (int **) malloc(sizeof(int *) *m);//申请一组一维指针空间。
for(i = 0; i < m; i ++)
p[i] = (int *)malloc(sizeof(int) * n); //对于每个一闭液维指针,申请一行数据的空间。
for(i = 0; i <雹态粗 m; i ++)
for(j = 0; j < n; j ++)
scanf("%d",&p[i][j]);//输入第i行第j列的数据。其中&p[i][j]也可以写作p[i]+j或者是 *(p+i) + j. 功能相同。
printf("输入的数组为%d行%d列:\n", m, n);
for(i = 0; i < m; i ++)
{
for(j = 0; j < n; j ++)//这个循环可以输出一行元素。
printf("%d ", p[i][j]);//输出i行j列的元素。
printf("\n");//每行输入结束加换行符。
}
//释放源镇内存
for(i = 0; i < m; i ++)
free(p[i]);
free(p);
return 0;
}
C. C语言数组画图形~
inti,j;
system("cls");
for(i=0;i<23;i++)
{
for(j=0;j<76;j++)
{
if(i==3&&j>4&&j<20){printf("━━");}
else
if(i==22&&j>4&&j<20)printf("━━");
else
if(i==3&&j==4)printf("┏");
else
if(i==3&&j==20)printf("━━━┓");
else
if(i==22&&j==4)printf("┗");
else
if(i==22&&j==20)printf("━━━┛");
else
if(i>3&&i!=22&&(j==4||j==71))
printf("┃");
else
printf("");
}
printf(" ");
}
gotoxy(5,5);printf("┃");
gotoxy(73,5);printf("┃");
打印上图哪个界面
D. C语言里 灰度图像怎么转换为二维数组
1、步骤大概这样
第一步:读取图像数据到内存
第二步:读取文件头
第三步:读取信息头
第四步:读取图像矩阵到二维数组
2、例程:
FileName=fileDlg.GetFileName();
FILE*fp=fopen(FileName,"rb");//二进制读方式打开指定的图像文件
fread(&FileHead,sizeof(BITMAPFILEHEADER),1,fp);//读取文件头,文件指针自动后移
fread(&InfoHead,sizeof(BITMAPINFOHEADER),1,fp);//读取信息头,文件指针自动后移
//获取图像宽、高、每像素所占位数等信息
bmpWidth=InfoHead.biWidth;
bmpHeight=InfoHead.biHeight;
//下面完成图像数据向内存数组的存储
ImageData=newunsignedchar*[bmpHeight];
if(InfoHead.biBitCount==24)
{
for(inti=0;i<bmpHeight;i++)
{
ImageData[i]=newunsignedchar[(bmpWidth*3+3)/4*4];
}
for(intk=0;k<bmpHeight;k++)
{
for(intj=0;j<(bmpWidth*3+3)/4*4;j++)
{
fread(&ImageData[k][j],1,1,fp);//上面完成动态二维数组的申请,这里实际读取图像数据
}
}
fclose(fp);//关闭文件
E. 请问C语言读取图像转换为二维数组程序有什么问题,怎么修改
FileName=fileDlg.GetFileName ();FILE *fp=fopen(FileName,"rb");//二进制读方式打开指定的图像文件fread(&FileHead, sizeof(BITMAPFILEHEADER), 1,fp); //读取文件头,文件指针自动后移fread(&InfoHead, sizeof(BITMAPINFOHEADER), 1,fp);//读取信息头,文件指针自动后移//获取图像宽、高、每像素所占位数等信息bmpWidth = InfoHead.biWidth;bmpHeight = InfoHead.biHeight;//下面完成图像数据向内存数组的存储ImageData=new unsigned char*[bmpHeight];if(InfoHead.biBitCount==24){for (int i=0;i<bmpHeight;i++){ImageData[i]=new unsigned char[(bmpWidth*3+3)/4*4];}for (int k=0;k<bmpHeight;k++ ){for(int j=0;j<(bmpWidth*3+3)/4*4;j++){fread(&ImageData[k][j],1,1,fp);//上面完成动态二维数组的申请,这里实际读取图像数据}}fclose(fp);//关闭文件
F. C语言如何画以一维数组为横坐标,和纵坐标的图
dimp(b.length-1)aspoint
foriasinteger=0tob.length-1
p(i).x=b(i)
p(i).y=h-a(i)'这里h是你要绘制曲线的控件的高度
next
然后在窗体或者picturebox的paint事件中:
'画笔
DimblackPenAsNewPen(Color.Black)
'绘制曲线
e.Graphics.DrawLines(blackPen,p)
G. 怎样用C语言将png图像读入数组并显示
c语言读取图片原理:通过文件流的方式读入到Byte的二进制数组中,之后,使用图像分析算法将图像显示到屏幕上,要将数组中的值转换为像素。
参考代码如下:
//function definition
void ImageRead(AnsiString name,int &width,int &height,int *r,int *g,int *b)
{
//read image
FILE *fp;
if((fp=fopen(name.c_str(),"rb"))==NULL) {
printf("cannot open bmp.name\n");
return ;
}
fread(&bfType,sizeof(WORD),1,fp);
if(bfType!=0x4d42) {//该值必需是0x4D42,也就是字符'BM'
printf("the input map is not bmp type");
return ;
}
fread(&bfSize,sizeof(DWORD),1,fp);
fread(&bfReserved1,sizeof(WORD),1,fp);
fread(&bfReserved2,sizeof(WORD),1,fp);
fread(&bfOffBits,sizeof(DWORD),1,fp);
fread(&bih,sizeof(BITMAPINFOHEADER),1,fp);
width=bih.biWidth ;