读书人

急求赐教麻烦各位看看多谢

发布时间: 2012-09-18 16:21:42 作者: rapoo

急求赐教,麻烦各位看看,谢谢
如下代码,实现读入十六进制数据,显示灰度图像。
问题是:运行后为何图像不显示,问题在哪里?请赐教!谢谢~~
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);
stream.Write(buffer1, 0, 4 * 256);
stream.Write(byData2, 0, length/2);//把实际的图像数据全部追加到头的后面



this.pictureBox1.Image = System.Drawing.Image.FromStream(stream);

}

private void timer1_Tick(object sender, EventArgs e)
{
ShowPic();
}
}
}


[解决办法]
你 timer 怎么设置的?
你可以直接在ShowPic();这里设置断点看看进不进来。
[解决办法]
应该是没启动计时器,你在Form1_Load里启动计时器看看
timer1.Start()

读书人网 >C#

热点推荐