代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
解析RSB图形结构
作者:
zgke
/ 发布于
2014/7/29
/
441
文件结构非常简单 ,就是 16位图 R使用 5位 G使用6位 B使用5位
//显示RSB文件 ImageRsb _RSB = new ImageRsb(@"D:/temp/4.rsb"); pictureBox1.Image = _RSB.Image; //保存 ImageRsb _RSB = new ImageRsb(); _RSB.Image = (Bitmap)Image.FromFile(@"d:/TEMP/1.bmp"); _RSB.SaveImage(@"d:/temp/ok.rsb"); //这个文件不知道ACDSEE为什么标记为24位图形 实际只有16位。 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Runtime.InteropServices; using System.Drawing.Imaging; using System.Drawing; namespace Zgke.MyImage.ImageFile { */ /// <summary> /// RSB文件结构 /// zgke@sina.com /// QQ:116149 /// </summary> public class ImageRsb { private Bitmap m_Bitmap; public Bitmap Image { get { return m_Bitmap; } set { m_Bitmap = value; } } private uint m_Heard = 0; private uint m_Width = 0; private uint m_Height = 0; private uint m_No1 = 0; private uint m_No2 = 5; private uint m_No3 = 6; private uint m_No4 = 5; private uint m_No5 = 0; public ImageRsb() { } public ImageRsb(string p_FileName) { if (!File.Exists(p_FileName)) throw new Exception("文件不存在!"); byte[] _Bytes = File.ReadAllBytes(p_FileName); if (BitConverter.ToUInt32(_Bytes, 0) != 0) throw new Exception("格式不正确!"); m_Width = BitConverter.ToUInt32(_Bytes, 4); m_Height = BitConverter.ToUInt32(_Bytes, 8); m_No1 = BitConverter.ToUInt32(_Bytes, 12); m_No2 = BitConverter.ToUInt32(_Bytes, 16); m_No3 = BitConverter.ToUInt32(_Bytes, 20); m_No4 = BitConverter.ToUInt32(_Bytes, 24); m_No5 = BitConverter.ToUInt32(_Bytes, 28); if (m_No1 != 0 || m_No2 != 5 || m_No3 != 6 || m_No4 != 5 || m_No5 != 0) throw new Exception("未实现!"); if (m_Width * m_Height * 2 != _Bytes.Length - 32) throw new Exception("文件长度不正确!"); LoadImage(_Bytes, 32); } /// <summary> /// 获取图形数据 /// </summary> /// <param name="p_FileBytes"></param> /// <param name="p_ReadIndex"></param> private void LoadImage(byte[] p_FileBytes, int p_ReadIndex) { m_Bitmap = new Bitmap((int)m_Width, (int)m_Height, PixelFormat.Format16bppRgb565); BitmapData _BitmapData = m_Bitmap.LockBits(new Rectangle(0, 0, m_Bitmap.Width, m_Bitmap.Height), ImageLockMode.ReadWrite, m_Bitmap.PixelFormat); byte[] _WriteBytes = new byte[_BitmapData.Stride * _BitmapData.Height]; int _StarReadIndex = p_ReadIndex; int _RowCount = (int)m_Width * 2; for (int i = 0; i != _BitmapData.Height; i++) { Array.Copy(p_FileBytes, _StarReadIndex, _WriteBytes, i * _BitmapData.Stride, _RowCount); _StarReadIndex += _RowCount; } Marshal.Copy(_WriteBytes, 0, _BitmapData.Scan0, _WriteBytes.Length); m_Bitmap.UnlockBits(_BitmapData); } /// <summary> /// 保存数据到文件 /// </summary> /// <param name="p_File"></param> public void SaveImage(string p_File) { if (m_Bitmap == null) return; System.IO.File.WriteAllBytes(p_File, GetFileBytes()); } /// <summary> /// 保存图形 /// </summary> /// <returns></returns> private byte[] GetFileBytes() { MemoryStream _Stream = new MemoryStream(); _Stream.Write(BitConverter.GetBytes(m_Heard), 0, 4); _Stream.Write(BitConverter.GetBytes((uint)m_Bitmap.Width), 0, 4); _Stream.Write(BitConverter.GetBytes((uint)m_Bitmap.Height), 0, 4); _Stream.Write(BitConverter.GetBytes(m_No1), 0, 4); _Stream.Write(BitConverter.GetBytes(m_No2), 0, 4); _Stream.Write(BitConverter.GetBytes(m_No3), 0, 4); _Stream.Write(BitConverter.GetBytes(m_No4), 0, 4); _Stream.Write(BitConverter.GetBytes(m_No5), 0, 4); byte[] _ImageBytes = SaveImage(); _Stream.Write(_ImageBytes, 0, _ImageBytes.Length); return _Stream.ToArray(); } /// <summary> /// 获取图形数据区 /// </summary> /// <returns></returns> private byte[] SaveImage() { Bitmap _NewBitmap = new Bitmap(m_Bitmap.Width, m_Bitmap.Height, PixelFormat.Format16bppRgb565); byte[] _WriteBytes = new byte[m_Bitmap.Width * m_Bitmap.Height * 2]; int _RowCount = m_Bitmap.Width * 2; Graphics _Graphcis = Graphics.FromImage(_NewBitmap); _Graphcis.DrawImage(m_Bitmap, new Rectangle(0, 0, _NewBitmap.Width, _NewBitmap.Height)); _Graphcis.Dispose(); BitmapData _Data = _NewBitmap.LockBits(new Rectangle(0, 0, _NewBitmap.Width, _NewBitmap.Height), ImageLockMode.ReadOnly, _NewBitmap.PixelFormat); byte[] _ReadBytes = new byte[_Data.Stride * _Data.Height]; Marshal.Copy(_Data.Scan0, _ReadBytes, 0, _ReadBytes.Length); _NewBitmap.UnlockBits(_Data); for (int i = 0; i != _Data.Height; i++) { Array.Copy(_ReadBytes, i * _Data.Stride, _WriteBytes, i * _RowCount, _RowCount); } _NewBitmap.Dispose(); return _WriteBytes; } } }
试试其它关键字
RSB
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
zgke
贡献的其它代码
(
46
)
.
让程序只保证一个进程的类
.
获取PictureBox的SizeMode为Zoom图形的大小
.
获取RICHTEXTBOX所有图形的位置和大小
.
实现系统热键盘注册的类.
.
操作CUR的类
.
读写 Photoshop PSD文件 操作类
.
获取系统鼠标指针
.
隐藏滚动条
.
实现BCD码
.
获取EXCEL所有表名
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3