CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何绘制和保存256色bmp图???

楼主Johnnyxy(风里密码)2005-02-25 10:17:22 在 .NET技术 / C# 提问

这个问题已经困惑我很久了,以前发了帖子,都没有解决。希望这次能遇到高手。  
   
  注意:是256色的bmp图,谢谢大家了~~~ 问题点数:100、回复次数:15Top

1 楼hujiiori(Coder×Coder——sytu)回复于 2005-02-25 10:27:38 得分 2

FileStream   fs=File.Creat(.....);  
  Bitmap   b=new   Bitmap(fs);  
  b.SetPixel(x,y,color);  
  fs.Save();Top

2 楼hddhddhdd(还刀的)回复于 2005-02-25 11:03:17 得分 2

帮你UPTop

3 楼zachary7833(Miracle)回复于 2005-02-25 11:07:58 得分 2

到msdn查查Bitmap的文件结构,里面有个BITMAPINFOHEADER   结构体  
  通过设置biBitCount把Bitmap设置成256色  
   
  256色的bmp图对于超出256色范围的用系统调色板调色Top

4 楼jialiang(≈≈逆水行舟≈≈)回复于 2005-02-25 11:14:23 得分 2

upTop

5 楼Johnnyxy(风里密码)回复于 2005-02-25 11:56:42 得分 0

吃了饭来查,继续顶~~~Top

6 楼amendajing(学习,是个漫长的旅途!)回复于 2005-02-25 13:01:58 得分 0

markTop

7 楼web_gus(树欲静而风不止)回复于 2005-02-25 13:12:35 得分 2

up  
  Top

8 楼isaacyh(发现自己啥都不懂。。。回头学C++)回复于 2005-02-25 15:10:47 得分 90

呵呵,在C#里画256色的bmp图,用的是Bitmap类,但是要在unsafe的模式下(请在项目中选VS中的项目,选择最下面的项目属性,将配置属性中的允许不安全代码块设为true)  
  代码如下:  
   
  private   void   button1_Click(object   sender,   System.EventArgs   e)  
  {  
          unsafe  
          {  
                    //定义一个20×20大小的256色图,在初始的时候就是一幅全黑的(数据段全为0)图。  
  Bitmap   temp   =   new   Bitmap(20,20,System.Drawing.Imaging.PixelFormat.Format8bppIndexed);  
   
                    //将其放在内存中  
  MemoryStream   tempStream   =   new   MemoryStream();  
  temp.Save(tempStream,System.Drawing.Imaging.ImageFormat.Bmp);  
  tempStream.Flush();  
   
                    //这是其实256的bmp已经生成了,但我们一般要对其操作所以帮你写了以下代码:  
                    //这里是找到bmp的数据段,这个不用我解释了吧??自己看256的bmp格式去  
  byte[]   tempLocation   =   new   byte[2];  
  tempStream.Position   =   10;  
  tempStream.Read(tempLocation,0,2);  
                    //数据段在流中的位置  
  int   dataLocation   =   Convert.ToInt32(tempLocation[0])+Convert.ToInt32(tempLocation[1])*16*16;  
                    //将流的Position移到数据段  
  tempStream.Position   =   dataLocation;  
                    //定义一个和原图相同大小的数据段,在这里是整个替换了原来的图,使其变为全  
                    //白(255)。你如过想对其中的某一个点进行操作可以只write一个byte,即找到Position  
                    //后替换一个。  
  byte[]   imageData   =   new   byte[400];  
                    //几行几列。。。。这里全换成白的了。。。。  
  for(int   i=0;i<20;i++)  
  {  
        for(int   j=0;j<20;j++)  
      {  
            imageData[i*20+j]   =   Convert.ToByte(255);  
                        }  
  }  
  tempStream.Write(imageData,0,400);  
  tempStream.Flush();  
   
                    //这里的代码也是可以用来读一个文件流中的256的bmp的,这里我就用MemoryStream了  
  temp   =   new   Bitmap(tempStream);  
  this.pictureBox1.Image   =   temp;  
                    //可以保存成文件,用ACD打开,还是256的bmp。。。。  
                    temp.Save("C:\\1.bmp",System.Drawing.Imaging.ImageFormat.Bmp);  
  }  
  }Top

9 楼Johnnyxy(风里密码)回复于 2005-02-25 16:49:25 得分 0

:   isaacyh(发现自己啥都不懂。。。回头学C++)    
   
   
  写的很好啊,马上试验下,非常感谢,但是你有个地方好像不对  
  byte[]   tempLocation   =   new   byte[2];  
  tempStream.Position   =   10;  
  tempStream.Read(tempLocation,0,2);  
  数据偏移是一个4bytes的吧,你怎么只用2bytes?应该是  
  byte[]   tempLocation   =   new   byte[4];  
  tempStream.Position   =   10;  
  tempStream.Read(tempLocation,0,4);  
  才对吧  
  Top

10 楼isaacyh(发现自己啥都不懂。。。回头学C++)回复于 2005-02-25 16:55:40 得分 0

呵呵,是4个,后两个都是0。。。。。  
   
  Top

11 楼isaacyh(发现自己啥都不懂。。。回头学C++)回复于 2005-02-25 16:56:56 得分 0

懒得在后面写那个*256了,所以就写了两个。。。。Top

12 楼cdo(Everything has a favourable turn)回复于 2005-02-25 17:01:26 得分 0

学习,帮你顶、Top

13 楼Johnnyxy(风里密码)回复于 2005-02-25 18:13:31 得分 0

我直接用的这个,还是比较方便:  
  byte[]   tempLocation   =   new   byte[4];  
  tempStream.Position   =   10;  
  tempStream.Read(tempLocation,0,4);  
  int   dataLocation   =   BitConverter.ToInt32(tempLocation,0);  
   
  困扰这么久的问题终于解决了,非常感谢   isaacyh(发现自己啥都不懂。。。回头学C++)   的帮助,  
  以后大家可以直接利用这个例子来做变化了。揭帖~Top

14 楼isaacyh(发现自己啥都不懂。。。回头学C++)回复于 2005-02-25 18:39:13 得分 0

呵呵,BitConverter。。。。。Top

15 楼lgh12345(慧眼数码阅卷王2006)回复于 2005-04-04 23:32:24 得分 0

gzTop

相关问题

  • 绘制和保存256灰度色bmp图结果 有问题, Help !
  • 用vc编写了一个绘图程序,绘制的图怎么保存为bmp文件?
  • 如何将JPanel上绘制的东西保存成为一个图像(bmp或jpg等等均可)?
  • 如何把PICTURE中的IMAGE保存为单色或16色或256色的BMP
  • 绘制的曲线图如何保存?(单文档中)
  • 将HBITMAP保存为Bmp文件,发现Bmp文件颜色不正确,哪位老大帮俺看看
  • 如何保存位bmp?
  • ·绘制渐变色的问题·
  • ···再问绘制渐变色的问题···
  • 问题:如何保存在内存设备绘制的图到文件里面?

关键词

  • 数据
  • 代码
  • 项目
  • tempstream
  • templocation
  • 的bmp
  • bitmap
  • bmp
  • 数据段
  • 图

得分解答快速导航

  • 帖主:Johnnyxy
  • hujiiori
  • hddhddhdd
  • zachary7833
  • jialiang
  • web_gus
  • isaacyh

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo