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;
 

参考技术A 不准用sprintf 之类函数,要自己写,那么 这样自己写i2s如下:

#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维数组的主要内容,如果未能解决你的问题,请参考以下文章

base64转化为bmp图片?

怎样把TIF转化为JPG图片格式

java后台返回了一段hex数据,前端如何转化为图片?

c# 如何把字符串转化为代码!

将图片上的文段信息转化为文字信息需要用到啥ai技术

C# winform 如何直接读取HTML语言后打开该网页