📄 unit24.pas
字号:
unit Unit24;
{TUniDIB Example}
interface
uses
Forms,UniDIB, SysUtils,Graphics,
ComCtrls, Controls, Classes, ExtCtrls;
{$DEFINE SequentialAccess}
const C_BPP = 16; {only 16 or 24 !}
type
TForm24 = class(TForm)
Image1: TImage;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
private
UDIB:TUniDIB;
X:Integer;
AddS:Integer;
StartTime:TDateTime;
Redraws:Integer;
procedure DoIdle (Sender: TObject; var Done: Boolean);
end;
var
Form24: TForm24;
implementation
{$R *.DFM}
procedure TForm24.FormCreate(Sender: TObject);
begin
UDIB:=TUniDIB.Create (Image1.Width,Image1.Height,C_BPP,SBU_NONE);
X:=0;
AddS:=+1;
Redraws:=0;
StartTime:=Now;
Application.OnIdle:=DoIdle;
Image1.Canvas.Brush.Style:=bsClear;
end;
procedure TForm24.DoIdle (Sender: TObject; var Done: Boolean);
var A,B:Integer;
R:Real;
begin
X:=X+AddS;
If (X=51) OR (X=0) then
AddS:=-AddS;
For A:=0 to Image1.Height-1 do
{$IFDEF SequentialAccess}
begin
UDIB.Seek (0,A);
For B:=0 to Image1.Width-1 do
begin
If C_BPP=16 then
UDIB.SetSeqPixel (((A AND $F8) SHL 13) OR
((B AND $F8) SHL 5) OR
(((X*5) AND $F8) SHR 3))
else {=> C_BBP=24}
UDIB.SetSeqPixel (((A AND $FF) SHL 16) OR
((B AND $FF) SHL 8) OR
((X*5) AND $FF));
end;
end;
{$ELSE}
For B:=0 to Image1.Width-1 do
begin
If C_BPP=16 then
UDIB.SetPixel (B,A,((A AND $F8) SHL 13) OR
((B AND $F8) SHL 5) OR
(((X*5) AND $F8) SHR 3))
else {=> C_BBP=24}
UDIB.SetPixel (B,A,((A AND $FF) SHL 16) OR
((B AND $FF) SHL 8) OR
((X*5) AND $FF));
end;
{$ENDIF}
UDIB.DIBtoScreen (Image1.Canvas.Handle);
Image1.Canvas.TextOut (5,5,'Please send me e-mail what do you');
Image1.Canvas.TextOut (5,20,'think about this ''component'':');
Image1.Canvas.TextOut (5,40,'vkovalcik@iname.com');
Inc (Redraws);
R:=((Now-StartTime)/0.000011574);
If R<>0 then
StatusBar1.SimpleText:='Frames per second : '+IntToStr (Round(Redraws/R))
else
StatusBar1.SimpleText:='Frames per second : ?';
Image1.Repaint;
Done:=False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -