unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,ExtCtrls, StdCtrls;
type TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Image2: TImage;
procedure Button1Click(Sender: Tobject);
procedure FormCreate(Sender: Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Procedure Tform1.Button1Click(Sender: Tobject);
var winDC, srcdc, destdc : HDC;
oldBitmap : HBitmap;
iinfo : TICONINFO;
begin
GetIconInfo(Image1.Picture.Icon.Handle, iinfo);
WinDC:= getDC(handle);
srcDC:= CreateCompatibleDC(WinDC);
destDC:= CreateCompatibleDC(WinDC);
oldBitmap:= SelectObject(destDC, iinfo.hbmColor);
oldBitmap:= SelectObject(srcDC, iinfo.hbmMask);
BitBlt(destdc, 0, 0, Image1.picture.icon.width, Image1.picture.icon.height, srcdc, 0, 0, SRCPAINT);
Image2.picture.bitmap.handle := SelectObject(destDC, oldBitmap);
DeleteDC(destDC);
DeleteDC(srcDC);
DeleteDC(WinDC);
image2.Picture.Bitmap.savetofile(ExtractFilePath(Application.ExeName) + 'myfile.bmp');
end;
Procedure Tform1.FormCreate(Sender: Tobject);
begin
image1.picture.icon.loadfromfile('c:\myicon.ico');
end;
end.
Unix-ΡΡΡΠΎΠΊΠΈ (ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ Unix-ΡΠ°ΠΉΠ»ΠΎΠ²)
ΠΠ°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΡΠΎΡΠΌΠ°ΡΠ° Unix.
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 Π΄Π»Ρ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ}
Last : SampleIndex; {ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ yyy}
MinO, MaxO : Real; {ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ yyy}
end;
var K0R, K1R, K2R, K3R: Observation;
K0B, K1B, K2B, K3B : Observation;
{================== ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ===================}
var StandardDatabase: String[80];
BaseFileName: String[80];
StandardOutput: String[80];
StandardInput: String[80];
{=============== ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ==================}
procedure ReadWAVFile(var Ki, Kj : Observation);
procedure WriteWAVFile(var Ki, Kj : Observation);
procedure ScaleData(var Kk: Observation);
procedure InitallSignals;
procedure InitLinearSystem;
implementation
{$R *.DFM}
uses VarGraph, SysUtils;
{================== Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ WAV-ΡΠ°ΠΉΠ»Π° ===================}
const MaxDataSize : LongInt = (MaxN+1)*2*2;
const MaxRIFFSize : LongInt = (MaxN+1)*2*2+36;
const StandardWAV : WAVHeader = (
nChannels : Word(2);
nBitsPerSample : LongInt(16);
nSamplesPerSec : LongInt(8000);
nAvgBytesPerSec : LongInt(32000);
RIFFSize : LongInt((MaxN+1)*2*2+36);
fmtSize : LongInt(16);
formatTag : Word(1);
nBlockAlign : LongInt(4);