需要创建BinaryWriter类对象 进行写入
需要创建BinaryReader类对象 进行读取
需要创建两个FileStream类对象 进行读 和写
代码如下 《====》
try
{
fs_read = new FileStream(filePath_read, FileMode.Open, FileAccess.ReadWrite); //创建文件对象设置读写参数
br = new BinaryReader(fs_read); //创建二进制读取对象设置参数
fs_write = new FileStream(filePath_write, FileMode.Create, FileAccess.ReadWrite); //创建文件对象设置写入参数
bw = new BinaryWriter(fs_write);
byte[] final_data = new byte[16];
long filenum = br.BaseStream.Length; //文件中有多少个字节数
long index_sum = 0; //循环读取次数的初值
long count_sum = 0; //循环读取次数的终值
long big = 0; //最后一个坐标读取适当的数据
int octet = 0; //不满足于16的时候 盛放
int multiple = int.Parse(Convert.ToString(0xff, 10)) / int.Parse(textBox1.Text); //用0xff除以获取文本框上的数字获取倍数
if (filenum / 16 != 0) //判断当前文件是否有数据
{
if (filenum % 16 == 0) //如果字节数除以16能整除
{
count_sum = filenum / 16;
}
else //如果不能整除
{
count_sum = filenum / 16;
count_sum++;
big = count_sum; //最后一个坐标存入临时变量
octet = (int)(filenum % 16); //存放最后一行的字节数
}
while (index_sum < count_sum) //外循环 根据文件有多少行就循环多少次 每循环一次处理文件中的一行处理
{
byte[] temporary_data = new byte[16]; //放 旧文件数据 一行一行处理
if (index_sum == big - 1)
{
br.Read(temporary_data, 0, octet);
}
else
{
br.Read(temporary_data, 0, 16); //将缓冲区数据读入byte临时数组
}
for (int i = 0; i < temporary_data.Length; i++) //循环只用作处理 16个字节 和写入列表
{
if (int.Parse(temporary_data[i].ToString()) * multiple >= 255) //超出字节长度全部按 放255处理
{
final_data[i] = 255;
}
else //符合 放大51倍放入另一个yuv文件
{
byte[] temporary = BitConverter.GetBytes(int.Parse(temporary_data[i].ToString()) * multiple); //换算之后的数据转换 放入临时数据中
final_data[i] = temporary[0];
}
}
if (final_data.Length >= 16) //如果列表中元素大于等于16 写入新文件
{
bw.Write(final_data);
final_data = new byte[16]; //清楚所有元素 做一次初始化
}
index_sum++;
}
MessageBox.Show("转换已完成");
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
//释放资源收尾工作
br.Dispose();
br.Close();
bw.Dispose();
bw.Close();
}
以上代码绝无任何报错bug运行不了情况
有任何不懂的请留言,超过2小时没回复请私聊QQ:2773938492 推广一下个人学习网站 www.aolanghs.com 首页内附开发必备的框架资源导航 菜单栏顶部是我软件+网站的项目实战经验