
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 ;
} 展开
{
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 ;
} 展开
1个回答
展开全部
位图本来就是一个二维的位数组,此数组的每一个元素与图像的像素一一对应。位图中的每个像素值指明了一个单位网格内图像的平均颜色。
直接把数组循环输出,每组值的(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中的话,不清楚有没有这个函数。
直接把数组循环输出,每组值的(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中的话,不清楚有没有这个函数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询