자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey FMX THorzScrollBox 이미지 출력 관련 문의드립니다.
2018.08.20 10:00
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요. 모바일로 사내앱을 유지보수중에 있습니다.
THorzScrollBox 에 사내 직원 사진을 전체 불러와서 로컬에 저장 후 뿌려주는데,
기기 성능에 따라 전체직원을 불러올 경우 성능문제(프리징, 팅김)가 많이 발생하고 있습니다.
변경해서 생각해 볼것이
전체 이미지를 불러올 때 THorzScrollBox 에서 스크롤 이동시 해당 화면에서만
이미지를 뿌려주면 성능문제는 없으리라고 보는데,
이미지를 불러오는 1번 배열쪽에서 변경을 해줘야하는지..
2번 THorzScrollBox 옵션쪽에서 변경을 해줘야하는지 감이 오질 않네요.
조언좀 부탁드립니다.
1. 사번을 기준으로 웹 서버에 존재하는 jpg 파일을 읽어옵니다.
ImageLoadList 프로시저에 해당 배열을 저장합니다.
for i:=0 to RecordCount-1 do begin
v_Emp[i] := FieldByName('Emp').AsString;
Next;
end;
for i:=Low(v_Emp) to High(v_Emp) do begin
try
Http.Get (WEBSVRURL+v_Emp[i]+'.jpg',MS);
if MS.Size <> 0 then begin
try
bmp := TBitmap.CreateFromStream(MS);
th := bmp.CreateThumbnail(20,30);
th.SaveToStream(MS);
Ms.Position:=0;
Ms.SaveToFile(v_FileName);
finally
th.Free;
bmp.Free;
end;
ImageLoadList(v_Emp[i]);
2. 해당 프로시저에서는 아래와 THorzScrollBox에 적용합니다.
procedure ImageLoadList(a_No:String);
begin
with HorzScrollBox_Image do begin
h:=Height-Padding.Top-Padding.Bottom;
w:=Trunc((Height-Padding.Top-Padding.Bottom)*0.80);
end;
try
v_Image := TImage.Create(Self);
with v_Image do begin
Name := 'v_Image'+i.ToString;
Parent := HorzScrollBox_Image;
Height := h;
Width := w;
Position.Y := HorzScrollBox_Image.Padding.Top;
Position.X := HorzScrollBox_Image.Padding.Left+w*i+m*i+1;
Margins.Right := m;
Opacity := 1;
visible := true;
HitTest := true;
Tag := i;
TagFloat := i;
TagString := a_No;
OnMouseUp := onImageMouseUp;
OnMouseDown := onImageMouseDown;
GetEmpImage_Local(a_No,v_Image.Bitmap); <- 핸드폰 로컬에 저장(이후 재 접속시 이미지 불러올 필요없음)
WrapMode := TImageWrapMode.Stretch;
end;
댓글 0
Firemonkey FMX THorzScrollBox 이미지 출력 관련 문의드립니다.
2018.08.20 10:00
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요. 모바일로 사내앱을 유지보수중에 있습니다.
THorzScrollBox 에 사내 직원 사진을 전체 불러와서 로컬에 저장 후 뿌려주는데,
기기 성능에 따라 전체직원을 불러올 경우 성능문제(프리징, 팅김)가 많이 발생하고 있습니다.
변경해서 생각해 볼것이
전체 이미지를 불러올 때 THorzScrollBox 에서 스크롤 이동시 해당 화면에서만
이미지를 뿌려주면 성능문제는 없으리라고 보는데,
이미지를 불러오는 1번 배열쪽에서 변경을 해줘야하는지..
2번 THorzScrollBox 옵션쪽에서 변경을 해줘야하는지 감이 오질 않네요.
조언좀 부탁드립니다.
1. 사번을 기준으로 웹 서버에 존재하는 jpg 파일을 읽어옵니다.
ImageLoadList 프로시저에 해당 배열을 저장합니다.
for i:=0 to RecordCount-1 do begin
v_Emp[i] := FieldByName('Emp').AsString;
Next;
end;
for i:=Low(v_Emp) to High(v_Emp) do begin
try
Http.Get (WEBSVRURL+v_Emp[i]+'.jpg',MS);
if MS.Size <> 0 then begin
try
bmp := TBitmap.CreateFromStream(MS);
th := bmp.CreateThumbnail(20,30);
th.SaveToStream(MS);
Ms.Position:=0;
Ms.SaveToFile(v_FileName);
finally
th.Free;
bmp.Free;
end;
ImageLoadList(v_Emp[i]);
2. 해당 프로시저에서는 아래와 THorzScrollBox에 적용합니다.
procedure ImageLoadList(a_No:String);
begin
with HorzScrollBox_Image do begin
h:=Height-Padding.Top-Padding.Bottom;
w:=Trunc((Height-Padding.Top-Padding.Bottom)*0.80);
end;
try
v_Image := TImage.Create(Self);
with v_Image do begin
Name := 'v_Image'+i.ToString;
Parent := HorzScrollBox_Image;
Height := h;
Width := w;
Position.Y := HorzScrollBox_Image.Padding.Top;
Position.X := HorzScrollBox_Image.Padding.Left+w*i+m*i+1;
Margins.Right := m;
Opacity := 1;
visible := true;
HitTest := true;
Tag := i;
TagFloat := i;
TagString := a_No;
OnMouseUp := onImageMouseUp;
OnMouseDown := onImageMouseDown;
GetEmpImage_Local(a_No,v_Image.Bitmap); <- 핸드폰 로컬에 저장(이후 재 접속시 이미지 불러올 필요없음)
WrapMode := TImageWrapMode.Stretch;
end;