Вместо использования радиуса границы, как насчет использования пути обрезки над изображением?
.teamImage { clip-path: circle(50% at 50% 50%) ; }
Более подробная информация здесь: https://developer.mozilla.org/en-US / документы / Web / CSS / клип путь
Вы обычно не должны читать байт файлов для байта. Используйте BlockRead с большим значением (512, или 1024 часто являются лучшими), и используйте его возвращаемое значение для обнаружения, сколько байтов было считано.
Если размер не является слишком большим (и Ваше использование SetLength, кажется, поддерживает это), можно также использовать один вызов BlockRead, читая полный файл сразу. Так, изменяя Ваш подход, это было бы:
AssignFile(myfile,fname);
filesizevalue := GetFileSize(fname);
Reset(myFile, 1);
SetLength(dataarray, filesizevalue);
BlockRead(myFile, dataarray[0], filesizevalue);
CloseFile(myfile);
Возможно, Вы могли также изменить процедуру на булеву функцию под названием OpenAndReadFile и возвратить false, если файл не мог бы быть открыт или считан.
Ищите буферизированного потомка TStream. Это сделает Ваш код намного быстрее, поскольку чтение с диска сделано быстро, но можно циклично выполниться через буфер легко. Там являются различными о, или можно записать собственное.
Если это - достаточно длинный файл, что, читая его этот путь занимает значимое количество времени, я использовал бы поток вместо этого. Чтение блока будет намного быстрее, и нет никаких циклов для волнения о. Что-то вроде этого:
procedure openfile(fname:string);
var
myfile: TFileStream;
filesizevalue:integer;
begin
filesizevalue:=GetFileSize(fname); //my method
SetLength(dataarray, filesizevalue);
myFile := TFileStream.Create(fname);
try
myFile.seek(0, soFromBeginning);
myFile.ReadBuffer(dataarray[0], filesizevalue);
finally
myFile.free;
end;
end;
Кажется из Вашего кода, что Ваш рекордный размер 1 байт длиной. В противном случае затем измените строку чтения на:
myFile.ReadBuffer(dataarray[0], filesizevalue * SIZE);
или что-то подобное.
Если Ваш действительно хотят считать двоичный файл быстро, позвольте окнам волноваться о буферизации ;-) при помощи Файлов С отображенной памятью. Используя это Вы можете простая карта файл к ячейке памяти чтение как, он - массив.
Ваша функция стала бы:
procedure openfile(fname:string);
var
InputFile: TMappedFile;
begin
InputFile := TMappedFile.Create;
try
InputFile.MapFile(fname);
SetLength(dataarray, InputFile.Size);
Move(PByteArray(InputFile.Content)[0], Result[0], InputFile.Size);
finally
InputFile.Free;
end;
end;
Но я предложил бы не использовать глобальную переменную dataarray
, но или передайте его как var в параметре или используйте функцию, которая возвращает полученный массив.
procedure ReadBytesFromFile(const AFileName : String; var ADestination : TByteArray);
var
InputFile : TMappedFile;
begin
InputFile := TMappedFile.Create;
try
InputFile.MapFile(AFileName);
SetLength(ADestination, InputFile.Size);
Move(PByteArray(InputFile.Content)[0], ADestination[0], InputFile.Size);
finally
InputFile.Free;
end;
end;
TMappedFile от моего чтения статьи Fast файлов с помощью Размещения в ОЗУ, эта статья также содержит пример того, как использовать его для более "усовершенствованных" двоичных файлов.
Это зависит от формата файла. Если это состоит из нескольких идентичных записей, можно решить создать файл того типа записи.
Например:
type
TMyRecord = record
fieldA: integer;
..
end;
TMyFile = file of TMyRecord;
const
cBufLen = 100 * sizeof(TMyRecord);
var
file: TMyFile;
i : Integer;
begin
AssignFile(file, filename);
Reset(file);
i := 0;
try
while not Eof(file) do begin
BlockRead(file, dataarray[i], cBufLen);
Inc(i, cBufLen);
end;
finally
CloseFile(file);
end;
end;
Если Вы чувствуете очень bitheaded, можно обойти Win32 в целом и вызвать функцию Встроенного API NT ZwOpenFile (), который в моем неофициальном тестировании действительно сбривает крошечный бит. Иначе я использовал бы решение для Файла Davy С отображенной памятью выше.