Советы по Delphi. Версия 1.0.6 - [4]

Шрифт
Интервал

>unit StreamFile;


>interface


>Uses SysUtils;


>Procedure AssignStreamFile(var f: text; FileName: String);


>implementation


>Const BufferSize = 128;


>Type

> TStreamBuffer = Array[1..High(Integer)] of Char;

> TStreamBufferPointer = ^TStreamBuffer;

> TStreamFileRecord = Record

>  Case Integer Of

>  1: (

>   Filehandle: Integer;

>   Buffer: TStreamBufferPointer;

>   BufferOffset: Integer;

>   ReadCount: Integer;

>  );

>  2: (

>   Dummy : Array[1..32] Of Char

>  )

>  End;


>Function StreamFileOpen(var f : TTextRec): Integer;

>Var

> Status: Integer;

>Begin

> With TStreamFileRecord (F.UserData) Do Begin

>  GetMem(Buffer, BufferSize);

>  Case F.Mode Of

>  fmInput:

>   FileHandle:= FileOpen(StrPas(F.Name), fmShareDenyNone);

>  fmOutput:

>   FileHandle:= FileCreate(StrPas(F.Name));

>  fmInOut:

>  Begin

>   FileHandle:= FileOpen(StrPas(F.Name), fmShareDenyNone Or fmOpenWrite or fmOpenRead);

>   If FileHandle <> -1 Then status:= FileSeek(FileHandle, 0, 2); { Перемещаемся в конец файла. }

>   F.Mode:= fmOutput;

>  End;

>  End;

>  BufferOffset:= 0;

>  ReadCount:= 0;

>  F.BufEnd:= 0;  { В этом месте подразумеваем что мы достигли конца файла (eof). }

>  If FileHandle = -1 Then Result := -1

>  Else Result:= 0;

> End;

>End;


>Function StreamFileInOut(var F: TTextRec): Integer;

> Procedure Read(var Data: TStreamFileRecord);

>  Procedure CopyData;

>  Begin

>  While (F.BufEnd < Sizeof(F.Buffer) - 2) And (Data.BufferOffset <= Data.ReadCount) And (Data.Buffer [Data.BufferOffset] <> #10) Do Begin

>    F.Buffer[F.BufEnd]:= Data.Buffer^[Data.BufferOffset];

>    Inc(Data.BufferOffset);

>    Inc(F.BufEnd);

>   End;

>   If Data.Buffer [Data.BufferOffset] = #10 Then Begin

>    F.Buffer[F.BufEnd]:= #13;

>    Inc(F.BufEnd);

>    F.Buffer[F.BufEnd]:= #10;

>    Inc(F.BufEnd);

>    Inc(Data.BufferOffset);

>   End;

>  End;


> Begin

>  F.BufEnd:= 0;

>  F.BufPos:= 0;

>  F.Buffer:= '';

>  Repeat Begin

>   If (Data.ReadCount = 0) Or (Data.BufferOffset > Data.ReadCount) Then Begin

>    Data.BufferOffset:= 1;

>    Data.ReadCount:= FileRead(Data.FileHandle, Data.Buffer^, BufferSize);

>   End;

>   CopyData;

>  End Until (Data.ReadCount = 0) Or (F.BufEnd >= Sizeof (F.Buffer) - 2);

>  Result:= 0;

> End;


> Procedure Write(var Data: TStreamFileRecord);

> Var

>  Status: Integer;

>  Destination: Integer;

>  II: Integer;

> Begin

>  With TStreamFileRecord(F.UserData) Do Begin

>   Destination:= 0;

>   For II:= 0 To F.BufPos - 1 Do Begin

>    If F.Buffer[II] <> #13 Then Begin

>     Inc(Destination);

>     Buffer^[Destination]:= F.Buffer[II];

>    End;

>   End;

>   Status:= FileWrite(FileHandle, Buffer^, Destination);

>   F.BufPos:= 0;

>   Result:= 0;

>  End;

> End;


>Begin

> Case F.Mode Of

> fmInput:

>  Read(TStreamFileRecord(F.UserData));

> fmOutput:

>  Write(TStreamFileRecord(F.UserData));

> End;

>End;


>Function StreamFileFlush(var F: TTextRec): Integer;

>Begin

> Result:= 0;

>End;


>Function StreamFileClose(var F : TTextRec): Integer;

>Begin

> With TStreamFileRecord(F.UserData) Do Begin

>  FreeMem(Buffer);

>  FileClose(FileHandle);

> End;

> Result:= 0;

>End;


>Procedure AssignStreamFile(var F: Text; Filename: String);

>Begin

> With TTextRec(F) Do Begin

>  Mode:= fmClosed;

>  BufPtr:= @Buffer;

>  BufSize:= Sizeof(Buffer);

>  OpenFunc:= @StreamFileOpen;

>  InOutFunc:= @StreamFileInOut;

>  FlushFunc:= @StreamFileFlush;

>  CloseFunc:= @StreamFileClose;

>  StrPLCopy(Name, FileName, Sizeof(Name) - 1);

> End;

>End;


>end.

Преобразование BMP в JPEG в Delphi 3

Используя Delphi 3, как мне сохранить BMP-изображение в JPEG-файле?

Допустим, Image1 – компонент TImage, содержащий растровое изображение. Используйте следующий фрагмент кода для конвертации вашего изображения в JPEG-файл:

>var

> MyJpeg: TJpegImage;

> Image1: TImage;

>begin

> Image1:= TImage.Create;

> MyJpeg:= TJpegImage.Create;

> Image1.LoadFromFile('TestImage.BMP');  // Чтение изображения из файла

> MyJpeg.Assign(Image1.Picture.Bitmap);  // Назначание изображения объекту MyJpeg

> MyJpeg.SaveToFile('MyJPEGImage.JPG');  // Сохранение на диске изображения в формате JPEG

>end;

Декомпиляция звукового файла формата Wave и получение звуковых данных

Интересно, есть ли технология преобразования Wave-формата в обычный набор звуковых данных? К примеру, мне необходимо удалить заголовок и механизм (метод) сжатия, которые могут компилироваться и сохраняться вместе с Wave-файлами.

У меня есть программа под D1/D2, которая читает WAV-файлы и вытаскивает исходные данные, но она не может их восстанавить, используя зашитый алгоритм сжатия.

>unit LinearSystem;


>interface

>{============== Тип, описывающий формат WAV ==================}

>type wavheader = record

> nChannels       : Word;

> nBitsPerSample  : LongInt;

> nSamplesPerSec  : LongInt;

> nAvgBytesPerSec : LongInt;

> RIFFSize        : LongInt;

> fmtSize         : LongInt;

> formatTag       : Word;

> nBlockAlign     : LongInt;

> DataSize        : LongInt;

>end;


>{============== Поток данных сэмпла ========================}

>const MaxN = 300;  { максимальное значение величины сэмпла }

>type SampleIndex = 0..MaxN+3;

>type DataStream = array[SampleIndex] of Real;

>var N: SampleIndex;


>{============== Переменные сопровождения ======================}

>type Observation = record

> Name       : String[40];  {Имя данного сопровождения}

> yyy        : DataStream;  {Массив указателей на данные}

> WAV        : WAVHeader;   {Спецификация WAV для сопровождения}


Еще от автора Валентин Озеров
Советы по Delphi. Версия 1.4.3 от 1.1.2001

…начиная с 1001. Смотрите другие файлы…


Рекомендуем почитать
Графика для Windows средствами DirectDraw

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Виртуальная библиотека Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Пишем драйвер Windows на ассемблере

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Как писать драйвера

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Информационная технология. Оценка программной продукции характеристики качества и руководства по их применению

Стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 9126-91 «Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению»Information technology. Software product evaluation. Quality characteristics and guidelines for their use.