社区
C#
帖子详情
bmp图像的读取
DustLand
2009-10-19 09:26:41
准备:我现在已经按照bmp图的格式读出来了,已经取得数据区各个像素点的值,把调色板的数据也读出来了。
问题:我如何把图显示出来呢?1.再建个窗体,用gdi+画出来?2.还是什么别的方便的方法。。。。
PS:我知道image控件能够直接显示bmp,我想自己写一个显示的。谢谢大家~~~~
...全文
136
8
打赏
收藏
bmp图像的读取
准备:我现在已经按照bmp图的格式读出来了,已经取得数据区各个像素点的值,把调色板的数据也读出来了。 问题:我如何把图显示出来呢?1.再建个窗体,用gdi+画出来?2.还是什么别的方便的方法。。。。 PS:我知道image控件能够直接显示bmp,我想自己写一个显示的。谢谢大家~~~~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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");
c的
bmp
图像
读取
保存放大缩小程序.txt
c的
bmp
图像
读取
保存放大缩小程序.txt c的
bmp
图像
读取
保存放大缩小程序.txt
bmp
.rar_C语言
读取
bmp
_
bmp
图像
读取
_
bmp
语言_
读取
bmp
c#_
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
,试了很多个,这个应该有用,看看吧
bmp
.zip_
bmp
图像
_
bmp
图像
读取
_imread_matlab
读取
bmp
_
图像
读取
bmp
可以实现
BMP
图像
的
读取
和显示,不适用Matlab中的imread()函数
vc++实现
BMP
图像
读取
、灰度化程序
vc++6.0下的
BMP
图像
读取
、灰度化程序
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
c语言
读取
bmp
图像
C#
110,561
社区成员
642,566
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章