急求赐教,麻烦各位看看,谢谢
如下代码,实现读入十六进制数据,显示灰度图像。
问题是:运行后为何图像不显示,问题在哪里?请赐教!谢谢~~
PS:程序是从朋友那拷过来的,我只改了文件位置和名称(C:\Documents and Settings\Administrator\My Documents\nei.dat),然后根据程序添加了pictureBox和 Timer控件。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
int m = 0;
FileStream s = new FileStream(@"C:\Documents and Settings\Administrator\My Documents\nei.dat", FileMode.Open);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void ShowPic()
{
byte[] buffer = new byte[54];
for (int b = 0; b < 54; b++)
{
buffer[b] = 0;
}
buffer[0] = 66;
buffer[1] = 77;
buffer[2] = 54;
buffer[3] = 4;
buffer[4] = 1;
buffer[5] = 0;
buffer[10] = 54;
buffer[11] = 4;
buffer[14] = 40;
buffer[18] = 0;
buffer[19] = 1;
buffer[22] = 0;
buffer[23] = 1;
buffer[26] = 1;
buffer[28] = 8;
buffer[36] = 1;
buffer[38] = 116;
buffer[39] = 18;
buffer[42] = 116;
buffer[43] = 18;
buffer[47] = 1;
buffer[51] = 1;
byte[] buffer1 = new byte[4 * 256];
for (int k = 0; k < 256; k++)
{
buffer1[4 * k] = (byte)k;
buffer1[4 * k + 1] = (byte)k;
buffer1[4 * k + 2] = (byte)k;
buffer1[4 * k + 3] = 0;
}
//读入dat文件内容
byte[] byData = new byte[65536 * 2];
byte[] byData1 = new byte[65536 * 2];
byte[] byData2 = new byte[65536 * 2];
int length = byData.GetLength(0);
s.Read(byData, 0, 65536 * 2);
for (int i = 0; i < 65536; i++)
{
byData[i] = (byte)(((int)byData[2 * i] + (int)byData[2 * i + 1] * 256) / 4);
//图像数据左移八位然后右移两位实现如:A1 02到02 A1的转换
}
m++;
if (m >= 301)
{
s.Seek(0,SeekOrigin.Begin);
m = 0;
}
for (int i = 0; i < 65536; i++)
{
byData1[i] = byData[65535 - i];
}
for (int k = 0; k < 256; k++)
{
for (int j = 0; j < 256; j++)
{ byData2[j + k * 256] = byData1[(255 - j) + k * 256]; }
}
MemoryStream stream = new MemoryStream(length + 54+ 256*4);//为头腾出54个长度的空间
stream.Write(buffer, 0, 54)