Советы по Delphi. Версия 1.0.6 - страница 5

стр.

>

> 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 для сопровождения}

> Last       : SampleIndex; {Последний доступный индекс yyy}

> MinO, MaxO : Real;        {Диапазон значений yyy}

>end;


>var K0R, K1R, K2R, K3R: Observation;