자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi DoubleBuffered 속성을 True 로 설정하고 Picture.Bitmap 를 참조한 상태에서 TImage 에서 Bitmap 이외의 파일을 로드할 경우 이미지가 정상적으로 표시되지 않습니다.
2020.07.10 09:47
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
첨부한 소스 내용은 대략 다음과 같습니다.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Imaging.jpeg,
Vcl.Imaging.GIFImg, Vcl.Imaging.pngimage;
type
TForm1 = class(TForm)
imgBackground: TImage;
pnl1: TPanel;
img1: TImage;
tmrStartup: TTimer;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tmrStartupTimer(Sender: TObject);
private
{ Private declarations }
procedure TestDraw();
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Left := 0;
Top := 0;
DoubleBuffered := True;
pnl1.DoubleBuffered := True;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
// TestDraw();
end;
procedure TForm1.TestDraw;
begin
if not Assigned(imgBackground.Picture.Graphic) then
Exit;
if not Assigned(img1) then
Exit;
// 이 부분을 주석처리하면 정상적으로 보입니다.
if not Assigned(imgBackground.Picture.Bitmap) then
begin
end;
img1.Picture.Bitmap.Assign(imgBackground.Picture.Graphic);
end;
procedure TForm1.tmrStartupTimer(Sender: TObject);
begin
TTimer(Sender).Enabled := False;
TestDraw();
end;
TestDraw 안에서Assigned(imgBackground.Picture.Bitmap) 을 호출하면
메인 폼의 DoubleBuffered 속성을 True 로 한 상태에서
디자인 타임에 imgBackground.Picture 속성에 로드한 이미지가
Bitmap 이미지일 경우엔 이미지가 정상적으로 표시됩니다.
Gif 이미지일 경우엔 이미지가 표시가 안됩니다.
JPEG 이미지일 경우엔 이미지가 표시가 안됩니다.
PNG 이미지일 경우엔 이미지가 표시가 안됩니다.
TIF 이미지일 경우엔 이미지가 표시가 안됩니다.
단, TestDraw 안에서Assigned(imgBackground.Picture.Bitmap) 을 호출하는 부분을 주석처리한 경우엔
Bitmap 이외의 이미지를 Load 하더라도 잘 보입니다.
또한
TestDraw 안에서Assigned(imgBackground.Picture.Bitmap) 을 호출하는 부분을 주석처리하지 않은 상태에서는
DoubleBuffered 속성을 False 로 설정하면 Bitmap 이외의 이미지를 Load 하더라도 잘 보입니다.
1. 왜 이럴까요?
2. 어떻게 하면 DoubleBuffered 속성을 True 로 설정한 상태에서도
Bitmap 이외의 이미지일 경우 이미지가 정상적으로 보이게 할 수 있을까요?
DoubleBuffered 속성은 FormCreate 에서 설정하였습니다.
TestImage 들은 ..\TestImages 에 들어있습니다.
Delphi DoubleBuffered 속성을 True 로 설정하고 Picture.Bitmap 를 참조한 상태에서 TImage 에서 Bitmap 이외의 파일을 로드할 경우 이미지가 정상적으로 표시되지 않습니다.
2020.07.10 09:47
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
첨부한 소스 내용은 대략 다음과 같습니다.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Imaging.jpeg,
Vcl.Imaging.GIFImg, Vcl.Imaging.pngimage;
type
TForm1 = class(TForm)
imgBackground: TImage;
pnl1: TPanel;
img1: TImage;
tmrStartup: TTimer;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tmrStartupTimer(Sender: TObject);
private
{ Private declarations }
procedure TestDraw();
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Left := 0;
Top := 0;
DoubleBuffered := True;
pnl1.DoubleBuffered := True;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
// TestDraw();
end;
procedure TForm1.TestDraw;
begin
if not Assigned(imgBackground.Picture.Graphic) then
Exit;
if not Assigned(img1) then
Exit;
// 이 부분을 주석처리하면 정상적으로 보입니다.
if not Assigned(imgBackground.Picture.Bitmap) then
begin
end;
img1.Picture.Bitmap.Assign(imgBackground.Picture.Graphic);
end;
procedure TForm1.tmrStartupTimer(Sender: TObject);
begin
TTimer(Sender).Enabled := False;
TestDraw();
end;
TestDraw 안에서Assigned(imgBackground.Picture.Bitmap) 을 호출하면
메인 폼의 DoubleBuffered 속성을 True 로 한 상태에서
디자인 타임에 imgBackground.Picture 속성에 로드한 이미지가
Bitmap 이미지일 경우엔 이미지가 정상적으로 표시됩니다.
Gif 이미지일 경우엔 이미지가 표시가 안됩니다.
JPEG 이미지일 경우엔 이미지가 표시가 안됩니다.
PNG 이미지일 경우엔 이미지가 표시가 안됩니다.
TIF 이미지일 경우엔 이미지가 표시가 안됩니다.
단, TestDraw 안에서Assigned(imgBackground.Picture.Bitmap) 을 호출하는 부분을 주석처리한 경우엔
Bitmap 이외의 이미지를 Load 하더라도 잘 보입니다.
또한
TestDraw 안에서Assigned(imgBackground.Picture.Bitmap) 을 호출하는 부분을 주석처리하지 않은 상태에서는
DoubleBuffered 속성을 False 로 설정하면 Bitmap 이외의 이미지를 Load 하더라도 잘 보입니다.
1. 왜 이럴까요?
2. 어떻게 하면 DoubleBuffered 속성을 True 로 설정한 상태에서도
Bitmap 이외의 이미지일 경우 이미지가 정상적으로 보이게 할 수 있을까요?
DoubleBuffered 속성은 FormCreate 에서 설정하였습니다.
TestImage 들은 ..\TestImages 에 들어있습니다.
내공이 상당하신 C++빌더님께 여쭈어 보심이
http://borlandforum.com/