1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
procedure TForm1.FormCreate(Sender: TObject);
var
t1, t2, t3, t4: Int64;
begin
t1 := TThread.GetTickCount64;
var BI: TBitmapInfo;
FillChar(BI, SizeOf(BI), 0);
BI.bmiHeader.biSize := SizeOf(BI.bmiHeader);
BI.bmiHeader.biWidth := 455;
BI.bmiHeader.biHeight := 436;
BI.bmiHeader.biPlanes := 1;
BI.bmiHeader.biBitCount := 8;
BI.bmiHeader.biSizeImage := 456 * 436; // 456 qui est multiple de 4 !
for var I := 0 to 255 do // palette de gris
begin
BI.bmiColors[I].rgbBlue := I;
BI.bmiColors[I].rgbGreen := I;
BI.bmiColors[I].rgbRed := I;
BI.bmiColors[I].rgbReserved := 0;
end;
var BMF: TBitmapFileHeader;
BMF.bfType := $4D42;
BMF.bfOffbits := SizeOf(BMF) + SizeOf(BI);
BMF.bfSize := BMF.bfOffBits + BI.bmiHeader.biSizeImage;
var F := TMemoryStream.Create;
F.WriteBuffer(BMF, SizeOf(BMF));
F.WriteBuffer(BI, SizeOf(BI));
t2 := TThread.GetTickCount64;
var Dat := TFileStream.Create('..\..\lena455x436-8bit.dat', fmOpenRead);
var L: TArray<Byte>;
SetLength(L, 456);
for var Y := 0 to 435 do
begin
Dat.Read(L[0], 455);
F.Write(L[0], 456); // ajouter 1 octet pour avoir des lignes en multiple de 4
end;
Dat.Free;
// F.SaveToFile('BITMAP.BMP');
F.Position := 0;
t3 := TThread.GetTickCount64;
Image1.Bitmap.LoadFromStream(F); // on a maintenant un bête BITMAP
t4 := TThread.GetTickCount64;
F.Free;
ShowMessage(
(T2 - T1).ToString + 'ms'#13 +
(T3 - T2).ToString + 'ms'#13 +
(T4 - T3).ToString + 'ms'#13 +
(T4 - t1).ToString + 'ms'
);
end; |
Partager