C++builder 图像字符流的存储和加载
- __fastcall TForm6::TForm6(TComponent* Owner)
- : TForm(Owner)
- {
- #if 1 //for debug
- AllocConsole();
- AttachConsole( GetCurrentProcessId() ) ;
- freopen( "CON", "w", stdout ) ;
- #endif
- Image1->Picture->LoadFromFile("HeadImage-UI/Photo-001.bmp");
- strcpy(text,"图片信息.a");
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm6::LoadImageClick(TObject *Sender)
- {
- String strFileName = "123.bat";
- //打开或创建目标文件
- int nFileHandle;
- if(FileExists(strFileName))
- nFileHandle = FileOpen(strFileName,fmOpenWrite);
- else
- nFileHandle = FileCreate(strFileName);
- //定位到文件头
- FileSeek(nFileHandle,0x0,);
- //把Image中的位图存入流中
- TMemoryStream *ms = new TMemoryStream;
- Image1->Picture->Bitmap->SaveToStream(ms);
- //先把图片流的大小写入文件中
- DWORD dw = ms->Size;
- FileWrite(nFileHandle,&dw,sizeof(dw));
- //再把图片流吸入文件中
- FileWrite(nFileHandle,ms->Memory,ms->Size);
- //接着写入Edit文本的长度
- dw = strlen(text);
- cout<<dw<<endl;
- FileWrite(nFileHandle,&dw,sizeof(dw));
- //再把Edit的文本写入文件
- FileWrite(nFileHandle,text,dw);
- delete ms;
- FileClose(nFileHandle);
- Image1->Picture->Assign(NULL);
- Edit1->Clear();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm6::ShowImageClick(TObject *Sender)
- {
- String strFileName = "123.bat";
- //打开图片流文件
- int nFileHandle;
- if(FileExists(strFileName))
- nFileHandle = FileOpen(strFileName,fmOpenRead);
- else
- {
- ShowMessage("File not find");
- return;
- }
- //定位到文件头
- FileSeek(nFileHandle,0x0,);
- //先读取图像流的大小
- DWORD dw;
- FileRead(nFileHandle,&dw,sizeof(dw));
- //根据图像流的大小,从文件中读取图像流
- TMemoryStream *ms = new TMemoryStream;
- byte *p = new byte[dw];
- FileRead(nFileHandle,p,dw);
- ms->Write(p,dw);
- delete p;
- //把图像流中的位图显示到Image上面
- ms->Position = ;
- Image1->Picture->Bitmap->LoadFromStream(ms);
- //接着读取文本长度
- FileRead(nFileHandle,&dw,sizeof(dw));
- //然后把指定长度的内容写到Edit中
- char *str = new char[dw*];
- FileRead(nFileHandle,str,dw);
- str[dw]=0x0;
- Edit1->Text = str;
- cout<< dw <<endl;
- delete str;
- delete ms;
- }
- //---------------------------------------------------------------------------
C++builder 图像字符流的存储和加载的更多相关文章
- Python 黑帽编程 4.2 Sniffer之数据本地存储和加载
在上一节,我们完成了编写一个简易的Sniffer的第一步--数据捕获. 很多时候,我们需要将捕获的数据先保存到磁盘上,之后再使用工具或者自己编写代码来进行详细分析. 本节我们在上一节的基础上来讲解保存 ...
- [Day23]IO(字节流、字符流)
1.字节流 1.1 字节输出流OutputStream-抽象类,表示输出字节流的所有类的超类 (1)void close() 关闭此输出流并释放与此流相关的所有系统资源 (2)void flush() ...
- IO(字节流、字符流)
第1章 字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 1.1 字节输出流OutputStream ...
- java基础(23):字节流、字符流
1. 字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 1.1 字节输出流OutputStream Out ...
- java ->IO流_字符流
字符流 经过前面的学习,我们基本掌握的文件的读写操作,在操作过程中字节流可以操作所有数据,可是当我们操作的文件中有中文字符,并且需要对中文字符做出处理时怎么办呢? 字节流读取字符的问题 通过以下程序读 ...
- java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- Java字节流和字符流区别
1.字节流:直接操作文件本身. 2.字符流:通过缓冲区来操作文件. 所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节 ...
- java IO流 之 字符流
字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...
- [Java IO]03_字符流
Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类. 它的定义如下: public abstra ...
随机推荐
- LENGTH() CHAR_LENGTH()
http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_length LENGTH(str) Returns the ...
- android 设计工具栏
设计工具栏Action Bar(订制工具栏类型) 工具栏给用户提供了一种熟悉和可预测的方式来执行某种动作和操纵应用程序,但是这并不意味着它就需要和其他的应用程序看起来一样的.如果想设计工具栏以使得它能 ...
- PHP 依赖注入 (转)
说这个话题之前先讲一个比较高端的思想--'依赖倒置原则' "依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高 ...
- android导入项目出现R文件不能生成
关于原因网上有好多,比如 1.有时候eclipse不自动编译,把project clean一下,让R.java重新生成 2.选择菜单 Project >> Clean ,前提是勾选上 ...
- Scrum 的相关概念
Scrum 的相关概念 4.1 Scrum 的起源 Scrum 是一种灵活的敏捷软件开发管理过程,这个名词来源于英式橄榄球.Scrum方法由Ken Schwaber和Jeff Sutherland ...
- v2.0
#include <stdio.h>#include <string.h>#include <ctype.h>typedef struct node{ char l ...
- 关于HIVE的配置
一:安装配置hive 1.检测hadoop 2.解压hive 3.修改环境 sudo vi /etc/profile 4.source以下 5.复制hive-env.sh 6.编辑hive-env.s ...
- VS2013编译Qt5.6.0静态库(乌合之众)
获取qt5.6.0源码包 直接去www.qt.io下载就好了,这里就不详细说了. 这里是我已经编译好的** 链接:http://pan.baidu.com/s/1pLb6wVT 密码: ak7y ** ...
- Solaris 10下Qt编译Oracle 10g驱动
上回书讲到<Oracle 10g在Solaris 10中安装详解>,现在开始用Qt来编译下Oracle 10g驱动吧!这样就可以通过Qt程序联入Oracle数据库了! Oracle的环境变 ...
- 从输入url到页面加载完成都发生了什么?
原文地址: http://segmentfault.com/a/1190000003925803 根据 URL 请求页面过程 过程概述 浏览器查找域名对应的 IP 地址: 浏览器根据 IP 地址与服务 ...