TImage控件的怪问题:

Iamfish 2003-01-16 02:07:26
在窗体中放一个TImage控件,加放一个图片,
放一个BitBtn控件,加入如下代码。
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if Image1.Picture.Bitmap<>nil then
Image1.Picture.SaveToFile('c:\d.jpg');
end;

现象:
按下按钮后Image1里面的内容被清空了。c:\d.jpg文件也是空的。

另我,我一引用Image1.Picture.Bitmap,Image控件的内容就为空,为什么?

(改为Image1.Picture<>nil就行了)

今天为这个问题花了一天的时间!!希望各位不要犯相同的错误。
...全文
42 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ehom 2003-01-17
  • 打赏
  • 举报
回复


if Image1.Picture.Graphic<>nil then
...

这几个对象指针意思完全不同,别乱用!

不过话说回来,这问题也不怪你,要怪就怪编译器!多做做跟踪调试的工作!原因很简单!

摘录部分调试时的汇编代码:

...
mov eax,[ebx+$000002f0]
mov eax,[eax+$00000168]
call TPicture.GetBitmap
test eax,eax
jz +$16
...

从中可以获得两点信息,如果用
if Image1.Picture.Bitmap<>nil then
后面的语句将肯定执行,换言之,Image1.Picture.Bitmap的对象指针一定不等于nil!这个从VCL中找答案!

还有就是调用了TPicture.GetBitmap,此乃图像消失的原因!

看下面从VCL中摘录的代码:

procedure TPicture.SetBitmap(Value: TBitmap);
begin
SetGraphic(Value);
end;

procedure TPicture.SetGraphic(Value: TGraphic);
var
NewGraphic: TGraphic;
begin
NewGraphic := nil;
if Value <> nil then
begin
NewGraphic := TGraphicClass(Value.ClassType).Create;
NewGraphic.Assign(Value);
NewGraphic.OnChange := Changed;
NewGraphic.OnProgress := Progress;
end;
try
FGraphic.Free;
FGraphic := NewGraphic;//关键就是以上这两句
Changed(Self);
except
NewGraphic.Free;
raise;
end;
end;

图像为空和对象指针指向nil还是有区别的!

用空再把这部分VCL再好好阅读下
weibz0525 2003-01-16
  • 打赏
  • 举报
回复
头文件包含<jpeg.hpp>文件
huangrenguang 2003-01-16
  • 打赏
  • 举报
回复
TPicture才能处理各种格式的文件吗,TBitmap只是对位图的处理

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧