• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

C#里的图像变化

ernestm 2004-11-02 11:50:48
我想问一下Visual.C#有没有什么控件能够把图像用一个二维数组或别的代替,然后又能够把二维数组转化为图像
...全文
207 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
E0888 2004-11-22
推荐一个C#群:6613147,欢迎C#热心的C#爱好者加入(注:如果只是想潜水的,请不要加。)
回复
haiwangstar 2004-11-22
要注意的是,在你操作从流创建的图像时,要保持流打开,否则会异常。。
回复
haiwangstar 2004-11-22
其实非常简单。我加了注释那几行就应该是你要的。
就是把一个图像写入流,和从一个流中创建图像。如果你想要图像的字节数组,取流的GetBuffer即可。。

下面的代码是操作位图字节数据的。
回复
wsjdx 2004-11-22
回复
haiwangstar 2004-11-22
Bitmap bit = sourceImage as Bitmap; //
if(bit == null) //如果原图不是位图。
{
MemoryStream s = new MemoryStream();
sourceImage.Save(s,ImageFormat.Bmp);//写入流。
bit = (Bitmap)Image.FromStream(s); //从流中读取位图。
}
BitmapData bmData = bit.LockBits(new Rectangle(0, 0, bit.Width, bit.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
int r=0, g=0, b=0;
float v=0;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - bit.Width*3;
for(int i=0;i<bit.Height;++i)
{
for(int x=0; x < bit.Width; ++x )
{
r = p[2];
g = p[1];
b = p[0];
v = r*0.299F + g*0.587F + b*0.114F + 0.3F;
hist[(byte)v]++;
p += 3;
}
p += nOffset;
}
}
bit.UnlockBits(bmData);
int total = 0;
for(int i=0; i!=256; i++)
{
if(hist[i]>total)
{
total = hist[i];
}
}

for(int i=0; i!=256; i++)
{
// values[i] = (int)((float)hist[i]/total*100);
values[i] = Math.Min(100,(hist[i]*1024/total));
}
newImageValue = true;
回复
ernestm 2004-11-22
怎么没有人回答,帮帮忙嘛
回复
ernestm 2004-11-11
我是个新手,您能不能给一个具体的例子(binarywriter把image的buffer写入流,
取的话用Image.From(xstream))给我,非常感谢!
回复
kangxidadi 2004-11-10
位图格式图像本身就是二维的像素数组,用像素的x,y坐标就可以存取像素,如果非要用数组形式,可以自己写个类封装位图,用坐标做索引。

用流存图片,简单的做法是new 一个流对象,用binarywriter把image的buffer写入流,
取的话用Image.From(xstream)就行了。
回复
ernestm 2004-11-10
还想问一下有没有什么组件能够对图象进行变形,像弯曲这一类的
回复
ernestm 2004-11-10
自己将图像转换为二进制流,然后再还原成图像,能不能把这个方法具体说一下呀,谢谢
回复
AhBian 2004-11-02
利用 Bitmap.GetPixel 和 Bitmap.SetPixel 方法可以实现楼主的要求.

但现成的组件好象没有。
回复
biduan 2004-11-02
可以
回复
xiaoslong 2004-11-02
up
回复
_jfeng 2004-11-02
没有,自己将图像转换为二进制流,然后再还原成图像,是可以的
回复
canoe_eyes 2004-11-02
gz
回复
lidawen 2004-11-02
學習
回复
520NET 2004-11-02
LG
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-11-02 11:50
社区公告

让您成为最强悍的C#开发者