bmp图像的读取

DustLand 2009-10-19 09:26:41
准备:我现在已经按照bmp图的格式读出来了,已经取得数据区各个像素点的值,把调色板的数据也读出来了。
问题:我如何把图显示出来呢?1.再建个窗体,用gdi+画出来?2.还是什么别的方便的方法。。。。
PS:我知道image控件能够直接显示bmp,我想自己写一个显示的。谢谢大家~~~~
...全文
136 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
on_way_ 2011-08-24
  • 打赏
  • 举报
回复
学习一下
DustLand 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyq11 的回复:]
public static Bitmap CreateBitmap(byte[] originalImageData, int originalWidth, int originalHeight)
        {
            Bitmap resultBitmap = new Bitmap(originalWidth, originalHeight, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
            MemoryStream curImageStream = new MemoryStream();
          resultBitmap.Save(curImageStream, System.Drawing.Imaging.ImageFormat.Bmp);
          curImageStream.Flush();
            int curPadNum = ((originalWidth * 8 + 31) / 32 * 4) - originalWidth;
            int bitmapDataSize = ((originalWidth * 8 + 31) / 32 * 4) * originalHeight;
            int dataOffset = ReadData(curImageStream, 10, 4);
            int paletteStart = 54;
            int paletteEnd = dataOffset;
            int color = 0;
            for (int i = paletteStart; i < paletteEnd; i += 4)
            {
                byte[] tempColor = new byte[4];
                tempColor[0] = (byte)color;
                tempColor[1] = (byte)color;
                tempColor[2] = (byte)color;
                tempColor[3] = (byte)0;
                color++;
                curImageStream.Position = i;
                curImageStream.Write(tempColor, 0, 4);
            }
            byte[] destImageData = new byte[bitmapDataSize];
          int destWidth = originalWidth + curPadNum;
            for (int originalRowIndex = originalHeight - 1; originalRowIndex >= 0; originalRowIndex--)
            {
                int destRowIndex = originalHeight - originalRowIndex - 1;
                for (int dataIndex = 0; dataIndex < originalWidth; dataIndex++)
                {
                    destImageData[destRowIndex * destWidth + dataIndex] = originalImageData[originalRowIndex * originalWidth + dataIndex];
                }
            } 
            curImageStream.Position = dataOffset;
            curImageStream.Write(destImageData, 0, bitmapDataSize);
          curImageStream.Flush();
            resultBitmap = new Bitmap(curImageStream);
            return resultBitmap;
        }


[/Quote]

恩,这个好,收藏了~~~
DustLand 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wodegege10 的回复:]
重写窗体的Paint方法
e.Graphics.DrawImage(_editorImage, new Rectangle(0, 0, width, height));
[/Quote]
谢谢,我先这么写着~~~~~~~
wuyq11 2009-10-19
  • 打赏
  • 举报
回复
public static Bitmap CreateBitmap(byte[] originalImageData, int originalWidth, int originalHeight)
{
Bitmap resultBitmap = new Bitmap(originalWidth, originalHeight, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
MemoryStream curImageStream = new MemoryStream();
resultBitmap.Save(curImageStream, System.Drawing.Imaging.ImageFormat.Bmp);
curImageStream.Flush();
int curPadNum = ((originalWidth * 8 + 31) / 32 * 4) - originalWidth;
int bitmapDataSize = ((originalWidth * 8 + 31) / 32 * 4) * originalHeight;
int dataOffset = ReadData(curImageStream, 10, 4);
int paletteStart = 54;
int paletteEnd = dataOffset;
int color = 0;
for (int i = paletteStart; i < paletteEnd; i += 4)
{
byte[] tempColor = new byte[4];
tempColor[0] = (byte)color;
tempColor[1] = (byte)color;
tempColor[2] = (byte)color;
tempColor[3] = (byte)0;
color++;
curImageStream.Position = i;
curImageStream.Write(tempColor, 0, 4);
}
byte[] destImageData = new byte[bitmapDataSize];
int destWidth = originalWidth + curPadNum;
for (int originalRowIndex = originalHeight - 1; originalRowIndex >= 0; originalRowIndex--)
{
int destRowIndex = originalHeight - originalRowIndex - 1;
for (int dataIndex = 0; dataIndex < originalWidth; dataIndex++)
{
destImageData[destRowIndex * destWidth + dataIndex] = originalImageData[originalRowIndex * originalWidth + dataIndex];
}
}
curImageStream.Position = dataOffset;
curImageStream.Write(destImageData, 0, bitmapDataSize);
curImageStream.Flush();
resultBitmap = new Bitmap(curImageStream);
return resultBitmap;
}

wenbin 2009-10-19
  • 打赏
  • 举报
回复
重写窗体的Paint方法
e.Graphics.DrawImage(_editorImage, new Rectangle(0, 0, width, height));
DustLand 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wodegege10 的回复:]
使用API自己绘上去。具体API记不起。查下就好

为什么要自己绘图呢
使用控件不好吗?
[/Quote]
因为老师说让熟悉bmp的格式。。。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。。。
wenbin 2009-10-19
  • 打赏
  • 举报
回复
使用API自己绘上去。具体API记不起。查下就好

为什么要自己绘图呢
使用控件不好吗?
threenewbee 2009-10-19
  • 打赏
  • 举报
回复
PictureBox1.Image = New BitMap("c:\\1.bmp");

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧