bitmap数据怎么转为数组并用SetPixel正确绘制出来?

BITMAPFILEHEADER*Amap::DibLoadImage(PTSTRpstrFileName){BOOLbSuccess;DWORDdwFileSize,d... BITMAPFILEHEADER* Amap::DibLoadImage(PTSTR pstrFileName)
{
BOOL bSuccess ;
DWORD dwFileSize, dwHighSize, dwBytesRead ;
HANDLE hFile ;
BITMAPFILEHEADER * pbmfh ;
hFile = CreateFile ( pstrFileName, GENERIC_READ, FILE_SHARE_READ,NULL,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,NULL) ;
if(hFile == INVALID_HANDLE_VALUE)
{
return NULL ;
}
dwFileSize = GetFileSize (hFile, &dwHighSize) ;
if (dwHighSize)
{
CloseHandle (hFile) ;
return NULL ;
}
pbmfh =(BITMAPFILEHEADER*)malloc(dwFileSize) ;
if(!pbmfh)
{
CloseHandle (hFile) ;
return NULL ;
}
bSuccess = ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL) ;
CloseHandle (hFile) ;
if (!bSuccess || (dwBytesRead != dwFileSize)
|| (pbmfh->bfType != * (WORD *) "BM")
|| (pbmfh->bfSize != dwFileSize))
{
free (pbmfh) ;
return NULL ;
}
return pbmfh ;
}
展开
 我来答
szm975851579
2012-05-05 · TA获得超过174个赞
知道答主
回答量:3
采纳率:100%
帮助的人:2.8万
展开全部
位图本来就是一个二维的位数组,此数组的每一个元素与图像的像素一一对应。位图中的每个像素值指明了一个单位网格内图像的平均颜色。

直接把数组循环输出,每组值的(x,y)分别对应的是setpixel中此点的x坐标与y坐标。再把color设定成Color.Gray即可。

小示例(转载)
Dim m As New Bitmap("D:\temp\1.png")‘随便改成个啥,要存在的图片
For i As Integer = 0 To 99
For j As Integer = 0 To 99
m.SetPixel(i, j, Color.Gray)
Next
Next
Me.PictureBox1.BackgroundImage = m
dim c as color
SetPixel(x, y, c.FromArgb(0x64C8C8FF))
你把你的byte转换成16进制可以直接使用了

想起来了,在c#中有个

Bitmap bmp = ToGrayBitmap(bytes, x, y);

这个就能直接操作。

vb.net中的话,不清楚有没有这个函数。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式