procedure TAddForm.ClearCanvas; //清空画布
begin
with Image1.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color :=$00800040;
Image1.Canvas.FillRect(ClientRect);
end;
end;procedure TAddForm.drawCanvas(filename: string; Image1:TImage); //读入图象
var
Jpg:TJPEGImage;
Bmp:TBitmap;
Iwidth,Iheight,Itop,Ileft:integer;
begin
bmp:=TBitmap.Create;
if uppercase(extractfileext(FileName))='.JPG' then
begin
Jpg:=TjpegImage.Create;
Jpg.LoadFromFile(FileName);
bmp.Assign(Jpg);
jpg.free;
end
else begin
bmp.LoadFromFile(FileName);
end;
if bmp.Width<Bmp.Height then begin
Iwidth:=trunc(Image1.Height*bmp.Width/bmp.Height);
ILeft:=Trunc(Image1.Width/2-Iwidth/2);
image1.canvas.stretchdraw(Rect(Ileft,0,
Iwidth+Ileft,Image1.Height),bmp);
end
else begin
Iheight:=Trunc(Image1.Width*bmp.Height/bmp.Width);
ITop:=Trunc(Image1.Height/2-Iheight/2);
image1.canvas.stretchdraw(Rect(0,Itop,
Image1.Width,Iheight+Itop),bmp);
end;
bmp.free;
end;procedure TAddForm.Button1Click(Sender: TObject);
begin
if Edit1.Text<>'' then
begin
main.ADOTable.Active:=true;
main.ADOTable.Insert;
main.ADOTable.FieldByName('照片').assign(image1.Picture;);
main.ADOTable.post;
main.ADOTable.Active:=false;
Application.messagebox('记录保存成功!','提示' ,MB_OK+MB_APPLMODAL);
clearCanvas;
DrawCanvas('defalt.jpg',Image1);
end
else begin
Application.messagebox('姓名必须输入!','注意' ,MB_OK+MB_APPLMODAL);
Edit1.SetFocus;
end;
end;
begin
with Image1.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color :=$00800040;
Image1.Canvas.FillRect(ClientRect);
end;
end;procedure TAddForm.drawCanvas(filename: string; Image1:TImage); //读入图象
var
Jpg:TJPEGImage;
Bmp:TBitmap;
Iwidth,Iheight,Itop,Ileft:integer;
begin
bmp:=TBitmap.Create;
if uppercase(extractfileext(FileName))='.JPG' then
begin
Jpg:=TjpegImage.Create;
Jpg.LoadFromFile(FileName);
bmp.Assign(Jpg);
jpg.free;
end
else begin
bmp.LoadFromFile(FileName);
end;
if bmp.Width<Bmp.Height then begin
Iwidth:=trunc(Image1.Height*bmp.Width/bmp.Height);
ILeft:=Trunc(Image1.Width/2-Iwidth/2);
image1.canvas.stretchdraw(Rect(Ileft,0,
Iwidth+Ileft,Image1.Height),bmp);
end
else begin
Iheight:=Trunc(Image1.Width*bmp.Height/bmp.Width);
ITop:=Trunc(Image1.Height/2-Iheight/2);
image1.canvas.stretchdraw(Rect(0,Itop,
Image1.Width,Iheight+Itop),bmp);
end;
bmp.free;
end;procedure TAddForm.Button1Click(Sender: TObject);
begin
if Edit1.Text<>'' then
begin
main.ADOTable.Active:=true;
main.ADOTable.Insert;
main.ADOTable.FieldByName('照片').assign(image1.Picture;);
main.ADOTable.post;
main.ADOTable.Active:=false;
Application.messagebox('记录保存成功!','提示' ,MB_OK+MB_APPLMODAL);
clearCanvas;
DrawCanvas('defalt.jpg',Image1);
end
else begin
Application.messagebox('姓名必须输入!','注意' ,MB_OK+MB_APPLMODAL);
Edit1.SetFocus;
end;
end;
解决方案 »
- 用TIdTcpServer、TIdTcpClient写的文件传输程序,为什么服务器端在传完以后会出错?在线等...
- 急
- Delphi 6.0编写一个小的计算器
- 请问delphi7.0中有没有一个框架的控件或者那有第三方的控件,谢谢!
- 100分相送!!!!急急急,报表自动换行!
- 双击bdgrid中的某一字段,如何弹出一个窗口
- 为什么oracle创建的sequence,delphi调用时生产的流水号不是连续的?
- 关于MDI过程调用有这么难吗 高手请进
- 最近打开的文件列表如何显示再菜单中?????很急
- 在delphi5中如何将程序图标添加到系统栏?
- RAD开发工具Dephi、Powerbuilder和VB的比较
- 那里有delphi的pdf格式的电子图书?
2 你用的是同一副图片进行测试的吗? 即是否可以排除是由于图片太大而引起的?
3 你说的变花是什么症状?是bmp还是jpg的时候发生的? 是半个画面正常半个变花还是
全部变花?
4 再确认一下是写入的时候不正常还是都出的时候出现问题? 可以用其他工具看一下
写入的图形大小是否正确? 同一副图片第一次和第二次在库里的大小是否已经不一样了?
最好用数据库自己带的浏览工具来查看。
如没有,在“main.ADOTable.post;”后面加一句,
main.ADOTable.Fl...;//tadotable的一个方法,全写不记得了,作用是释放它的所有缓冲区。
如成功,告知我。
2,同一副图我试过,也是第一次完好无缺,以后都不行
3,变花就好象是图片在16色状态下显示一样,是全部变花!
4,应该是写入不正常,因为第一次读入的图,以后读出时都是正常的!
大小,我现在就去测试!
你可参考一下:http://www.csdn.net/expert/topic/112/112660.shtm
我的结论是只要在jpeg存盘前Bitmap没有存盘的语句,生成的图像就正确,只要在jpeg存盘前加入了类似Bitmap1->SaveToFile ("d:\\www.bmp");这样的语句,jpeg存的文件就失真。
你也试试,如果有什么新的发现,请贴出来。
这么多,我不知道用哪个啊!
不会是
ADOTable.FreeInstance吧?
image1.canvas.stretchdraw(Rect(),bmp);然后再存入库中
mid:=image1.Picture;
...
main.ADOTable.FieldByName('照片').assign(mid);
...
post;
mid.free; //这句程序运行是本身没错,但这段程序运行完后就报一个application错误!
...
mid用过后free居然会报错,错误信息与ACCESS有关,不用free就一点事也没有!
mid:=Tpicture.Create;
mid:=image1.Picture;
?????
怎么会这样写呢? 不出错才怪!var
mid:Tpicture;
begin
mid:=image1.Picture;
...
main.ADOTable.FieldByName('照片').assign(mid);
...
post;...
end;不需要Create,如果一个对象Create了,就不可以被随便赋值,否则Free的时候出错就是后果了
mid:=Tpicture.Create;
mid:=image1.Picture;
怎么可以怎么写的? 你把mid对应的对象指针覆盖了,free当然出错了,
把free和create两句话都去掉试试
procedure clearbitmap(bit:tbitmap);
begin
bit.width:=0;
bit.height:=0;
end;
是不是MID:=IMAGE1。PICTURE这句并没有把IMAGE。PICTURE的值赋予MID,而是把MID指向
IMAGE1。PICTURE,然后在FREE的时候就把IMAGE1。PICTURE给FREE了!我也不大清楚!
贊成 flypuma 的觀點﹐非標准數據類型一定要用 assign 賦值!
改成
mid:=Tpicture.Create;
mid.Assign(Image1.Picture);
main.ADOTable.FieldByName('照片').assign(mid);
就行了! 所有图象全都正常了!!!可我还是不知道为什么, 为什么直接用
main.ADOTable.FieldByName('照片').assign(Image1.Picture);
就不行,而一定要用一个TPICTURE在中间传递???谁能告诉我!!!???
IMAGE1。PICTURE,然后在FREE的时候就把IMAGE1。PICTURE给FREE了!我也不大清楚!"说得完全正确!