Thread View: cn.bbs.comp.language
1 messages
1 total messages
Started by �Ϲ⡤��������
Wed, 13 Mar 2002 18:18
��Dephi��ʹ��TStream��д��ݵļ���
Author: �Ϲ⡤��������
Date: Wed, 13 Mar 2002 18:18
Date: Wed, 13 Mar 2002 18:18
122 lines
7228 bytes
7228 bytes
��Dephi���ṩ��һ��������������TStream��֧�ֶ���ʽ��ݵIJ�������Щ���ͨ��
�����ļ�����ݿ⡢�ڴ����OLE����ȣ�TStream�ṩ��ͳһ�����ķ�����������
�ݵĶ�д����ͨ������£����Dz�����Ҫֱ��ʹ��TStream�࣬����ʽ��ݵĶ�д��װ��
VCL�ؼ��ķ����С����������Щ�������������ǵ�Ҫ����Ҫ�Լ��ֶ�������ݵ�
���
һ�� TStream�ij��õķ��������ԣ�
1. function Read(var Buffer; Count: Longint): Longint; virtual; abstract
2. function Write(const Buffer; Count: Longint): Longint; virtual; abstract;
3. function Seek(Offset: Longint; Origin: Word): Longint; virtual; abstract;
4. property Position: Longint;
5. property Size: Longint
Read��Write��Seek���Ǵ��麯���ṩ����ݶ�д�Ͷ�λ�ij���ķ�����Read��������
�ݴ�Stream�ж���Buffer�������У�Write��ʵ���෴�IJ���������ֵ��ʾʵ�ʶ�д���
�Ĵ�С��Seek�ṩ����Stream���ƶ����ָ��ķ���������Origin����ȡsoFromBeginn
ing��soFromCurrent��soFromEnd ���ֵ��Offset��ƫ����������ֵ�ǵ�ǰStream���
ָ���λ�á�
Position��ʾ�����ָ����Stream�е�λ�á���������ǿɶ�д�ģ���ʵ���Ͼ���ͨ��
����Seek����ʵ�ֵģ�����ʵ��ʹ��ʱʹ��������Ը�Ϊ����һЩ��Size���Ա�ʾ��ǰ
Stream�Ĵ�С�����ڲ�ͬ��Stream����Щʱ����ֻ���ġ�
���� Stream��ݵĶ�д��
1. SaveToStream(Stream: TStream ); file://�����е����д��Stream�ĵ�ǰλ����
2. LoadFromStream(Stream: TStream); file://�ӵ�ǰλ�ö���Stream������
ʵ��ʹ��ʱ���ǻ���ֻҪʹ��������������Ϳ����ˡ�
�� ����
TStream�ļ̳���ͼ��ͼ1��ʾ(��)��ʵ��ʹ��ʱ�Ƚϳ��õ���TFileStream��TMemorySt
ream��TblobStream����������������һ��˵�������÷���
����һ������Form1�����������ťbtnRead��btnInvert��btnSave��һ���ļ��Ի�
��OpenDialog1�Լ���ݿؼ�DataSource1��Table1��test.
ʹ��Dephi�ṩ��Database Desktop����һ����test��������һ���ֶ���Image����ݿ�
�ļ����Ϊtest.db���ڴ����Ϸ���һ��TDatabase�ؼ�dbTest��һ��TTable�ؼ�Table1
,һ��DataSource�ؼ�DataSource1,һ��TDBNavigator�ؼ�DBNavigator1����dbTest���
��Desktop��������ݿ�������Table1��TableName������Ϊtest.db��DataSource1��Da
taSet������ΪTable1��DBNavigator1��DataSource������ΪDataSource1��VisibleBut
tons����ǰ�ĸ���ΪTRUE�����⣬��dbtest��Connected��ΪTRUE��Table1��Active����
��ΪTRUE��ʹ����ݿ�һ��ʼ�ʹ��ڴ�״̬��
�¼������д���£�
1. btnRead��Click�¼���������ʾ��TFileStream���÷���
var
��MS: TFileStream;
begin
��if OpenDialog1.Execute then
��begin
MS:=TFileStream.Create
(OpenDialog1.FileName, fmOpenRead);
����Image1.Picture.Bitmap.LoadFromStream(MS);
����MS.Free;
��end;
end;
2. btnInvert��Click�¼���������ʾ��TMemoryStream���÷�������ʹ����Invert����
������һ���Ľ�ͼ��ɫ�ĺ���������ͼ����Ч�������һ��ָ������
ͼ����ݿ��ָ�롣
var
��M
S: TMemoryStream;
��pImage: pointer;
begin
��MS:=TMemoryStream.create;
��Image1.Picture.Bitmap.SaveToStream(MS);
��MS.Position:=0;
��pImage:=Invert(MS.Memory, MS.size);
file://Memory������ָ��ʵ���ڴ���ָ��
��MS.Write(pImage^,MS.size);
��MS.Position:=0;��������
file://��һ�д���ʹָ���Ƶ���Streamĩβ������Ҫ��λ
��Image1.Picture.Bitmap.LoadFromStream(MS);
��FreeMem(pImage);
��MS.Free;
end;
Invert�������£�
function TForm1.Invert
(pImage: pointer; size: Integer): pointer;
var
��pData, pMem: PChar;
��i: Integer;
begin
��pMem:=AllocMem(size);
��CopyMemory(pMem,pImage,size);
��pData:=pMem+54;
��for i:=0 to size-54-1 do
��begin
����pData^:=Char(not integer(pData^));
����pData:=pData+1;
��end;
��Result:=pMem;
end;
1. btnSave��Click�¼���������ʾ��TMemoryStream����һ���÷�����Stream�е����
д����ݿ���ȥ��
var
��MS: TMemoryStream;
begin
��MS:=TMemoryStream.create;
��Image1.Picture.Bitmap.SaveToStream(MS);
��MS.Position:=0;
��Table1.Append;��
file://����ݿ������һ����¼
��TBlobField(Table1.FieldbyName
('image')).LoadFromStream(MS);
��Table1.Post; ������
file://�������ĸ���д����ݿ�
end;
4. DBNavigator1��Click�¼���������ʾ��TBlobStream���÷���ʹ���˺�д��ʱ��ͬ��
������������ݿ��ͼ����ݡ�
var
��MS: TStream;
begin
��with Table1 do
��MS:=CreateBlobStream
(FieldbyName('image'),bmRead);
��Image1.Picture.Bitmap.
LoadFromStream(MS);
��MS.Free;
end;
--
MM MM ��MM��MM����ࣻ
�罫MM�����³����ɡ�
[m[1;32m�� ��Դ:���콭ҹ�� bbs.gliet.edu.cn��[FROM: 192.168.89.122][m
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads