双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

使用OpenDialog出现“句柄无效”

lightdc4 lightdc4 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
因为要频繁地打开文件保存到数据库,所以用久了就会突然显示“句柄无效”,这是什么情况?

procedure Button1Click(Sender: TObject);
var
i : integer;
begin

OpenDialogFilter := '*.jpg|*.jpg';
OpenDialogFileName := '';
OpenDialogExecute;

if OpenDialogFiles.Count = 0 then
exit;

with aqrecordphotos do
begin
for i := 0 to OpenDialogFiles.Count - 1 do
begin
append;
tblobField(findfield('Photo')).LoadFromFile(OpenDialogFiles.Strings[i]);
tblobField(findfield('smallphoto')).LoadFromStream(ZoomJpgFrmFile(OpenDialogFiles.Strings[i]));
post;
end;
end;

end;

function ZoomJpgFrmFile(vFileName: String): TStream;
var
Jpg : TJpegImage;
Bmp : TBitmap;
const
SPercent : single = 0.1;
begin

jpg := TJpegImage.Create;
Bmp := TBitmap.Create;

jpg.loadfromfile(vfilename);

bmp := jpg2bmp(jpg);
if bmp.Width * SPercent <= 100 then
bmp := zoombmp(bmp,100,trunc(100 / bmp.Width * bmp.Height))
else
bmp := zoombmp(bmp,trunc(bmp.Width * spercent),trunc(bmp.Height * spercent));
jpg := bmp2jpg(bmp,100);

result := TMemoryStream.Create;
jpg.SaveToStream(result);
jpg.free;
bmp.Free;

end;

function Jpg2Bmp(Jpg: TJpegImage): TBitmap;
begin

Result := nil;
if Assigned(Jpg) then
begin
Result := TBitmap.Create;
Jpg.DIBNeeded; {Key method...}
Result.Assign(Jpg); {It‖s all folks...}
end;

end;

function ZoomBmp(vImage: TBitmap; dWidth,
dHeight: Integer): TBitmap;
var
ori: TBitmap;
dispositivo_o, dispositivo_d: HDC;
pepito: HBitmap;
begin

ori := Tbitmap.Create;
result := TBItmap.Create;
ori.handle := vImage.handle;
result.width := dWidth;
result.height := dHeight;
dispositivo_o := CreateCompatibleDC(0);
dispositivo_d := CreateCompatibleDC(0);
SelectObject(dispositivo_o, ori.handle);
pepito := SelectObject(dispositivo_d, result.handle);
SetStretchBltMode(dispositivo_d, STRETCH_HALFTONE);
StretchBlt(dispositivo_d, 0, 0, dWidth, dHeight, dispositivo_o, 0, 0, ori.width, ori.height, SRCCOPY);
SelectObject(dispositivo_d, pepito);
ori.Free;
DeleteObject(pepito);
DeleteDC(dispositivo_o);
DeleteDC(dispositivo_d);

end;

function Bmp2Jpg(Bmp: TBitmap; Quality: Integer): TJpegImage;
begin

Result := nil;
if Assigned(Bmp) then
begin
Result := TJpegImage.Create;
Result.Assign(Bmp); {It‖s all folks...}
Result.CompressionQuality := Quality;
Result.JPEGNeeded; {Key method...}
Result.Compress;
end;

end;
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部