C#中如何把图片转化为2维数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何把图片转化为2维数组相关的知识,希望对你有一定的参考价值。
以下是测试代码和验证结果:
static void Main( params string[] args )Bitmap img = new Bitmap( @"E:\\tempfolder\\testimage.bmp" ); // 导入一张RGB彩色图片
Rectangle lockRect = new Rectangle( 0, 0, img.Width, img.Height );
BitmapData imgData = img.LockBits( lockRect, ImageLockMode.ReadOnly, img.PixelFormat );
byte[,] rband = new byte[ img.Height, img.Width ]; // 彩色图片的R、G、B三层分别构造一个二维数组
byte[,] gband = new byte[ img.Height, img.Width ];
byte[,] bband = new byte[ img.Height, img.Width ];
int rowOffset = imgData.Stride - img.Width * 3;
// 这里不用img.GetPixel方法,而采用效率更高的指针来获取图像像素点的值
unsafe
byte* imgPtr = ( byte* )imgData.Scan0.ToPointer();
for( int i = 0; i < img.Height; ++i )
for( int j = 0; j < img.Width; ++j )
rband[ i, j ] = imgPtr[ 2 ]; // 每个像素的指针是按BGR的顺序存储的
gband[ i, j ] = imgPtr[ 1 ];
bband[ i, j ] = imgPtr[ 0 ];
imgPtr += 3; // 偏移一个像素
imgPtr += rowOffset; // 偏移到下一行
img.UnlockBits( imgData );
参考技术A 可以这样,image是个抽象类,不管用imge[]数组还是list<image> 都只是第一步,需要的是往数组里面存image;
List<Image> imgArr = new List<Image>();
imgArr.Add(Image.FromFile("a.jpg", false));
imgArr.Add(Image.FromFile("a.jpg", false));
imgArr.Add(Image.FromFile("a.jpg", false));
System.Collections.IEnumerator itor = imgArr.GetEnumerator();
while (itor.MoveNext())
Console.WriteLine(((Image)itor.Current).RawFormat);//输出图片的格式
C语言中如何把int型数组转化为字符串?
如何把int型数组转化为字符串?请给出一个函数方法
方法1:
int a[10]=1,2,3,4,5,6,7,8,9,0;
char buf[10];
string s;
for(int i=0;i<10;i++)
itoa(a[i],buf,10);
s+=buf;
方法2:
int a[10]=65,66,67,68,69,70,71,72,73,74;
char buf;
string s;
for(int i=0;i<10;i++)
buf=a[i];
s+=buf;
方法3:
int a[10]=0,1,2,3,4,5,6,7,8,9;
char buf;
string s;
for(int i=0;i<10;i++)
buf=(char)a[i]+48;
s+=buf;
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void i2s(int x, char *s)
int v,xx,i,j,n=0;
char c;
xx = abs(x);
while(1)
v=xx%10;
s[n]=v+'0'; n++;
xx=(xx-v)/10;
if (xx==0) break;
if (x<0) s[n]='-'; n++;
for (i=0;i<n/2;i++)
c=s[i]; s[i]=s[n-i-1];s[n-i-1]=c;
s[n]='\0';
main()
int a[4]=12,34,-56,789;
char s[4][15];
int i;
for (i=0;i<4;i++)
i2s(a[i],s[i]);
printf("%s ",s[i]);
return 0;
输出:12 34 -56 789
如用
int i2s(int x, char *s)
//全部照旧
return n;
可以返回字符串长度。
你若想把所有输出放入一个长长的char 数组,有了每个字符串长度,应当很容易自己做了--即使不用strcat()。 参考技术B 是以整型的位数为限的,输入位数太长了不行。
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"//
void main(void)
double rn=9876.5678;
int i=1000000000,k,pt=1,n;
char a[12]="";
printf("Enter a floating point number...\nrn=");
//scanf("%lf",&rn); //手工输入时把这一行开放.
while((rn/=10)>1.0) pt++;
n=(int)(rn*i);
while(!(n%10))
n/=10;
i/=10;
for(k=0,i/=10;i>=1;i/=10)
a[k++]=n/i+'0';
n%=i;
if(k==pt) a[k++]='.';
printf("%s\n",a);
参考技术C int b=13444;
sprintf(a,"%d" ,b)将b的值转换为“13444”字符串付给a。追问
不用 sprintf itoa
参考技术D char s[10];sprintf(s,"%d",10);
----------------------------------or--------------------------
#include <stdlib.h>
#include <stdio.h>
int main()
int number = 123456;
char string[25];
itoa(number, string, 10);
printf("integer = %d string = %s\n", number, string);
return 0;
追问
不用 sprintf itoa
追答那就考虑内存里面直接操作ASCII码,每位直接读了加0x30
追问就是这样,可以写成可以调用的函数形式吗,int中包括符号的
以上是关于C#中如何把图片转化为2维数组的主要内容,如果未能解决你的问题,请参考以下文章