Image2.Canvas.CopyRect(Image2.Canvas.ClipRect,Image1.Canvas,SrcRect);出错!!! 我想在Image1上截取一部分到Image2上。结果出错:Can only Modify an image if it contains a bitmap 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 提供一段代码给你参考:procedure TFrmDesktop.FixSize(const vFileName: String);var vBitmap3: TBitmap; vImage: TImage;begin try vImage := TImage.Create(self); vImage.Visible := False; vImage.AutoSize := true; vBitmap3 := TBitmap.Create; if CompareText(vExt, 'Bmp') = 0 then vImage.Picture.LoadFromFile(OpenDialog1.FileName); if CompareText(vExt, 'Jpg') = 0 then vImage.Picture.LoadFromFile(vFileName); if vImage.Picture.Bitmap.Height / vImage.Picture.Bitmap.Width > 0.75 then begin if vImage.Picture.Bitmap.Height >= ScreenY then begin vImage.Canvas.StretchDraw(Rect(0,0,round(vImage.Picture.Bitmap.Width * ScreenY/vImage.Picture.Bitmap.Height),ScreenY),vImage.Picture.Bitmap); vImage.Center := True; vBitmap3.Width := round(vImage.Picture.Bitmap.Width * ScreenY/vImage.Picture.Bitmap.Height); vBitmap3.Height := ScreenY; vBitmap3.Canvas.CopyRect(Rect(0,0,vBitmap3.Width,vBitmap3.Height), vImage.Canvas, Rect(0,0,round(vImage.Picture.Bitmap.Width * ScreenY/vImage.Picture.Bitmap.Height),ScreenY));Image2.Canvas, Rect(0,0,Image2.Width,Image2.Height)); end else vImage.Picture.Bitmap.SaveToFile(vFileName); end else if vImage.Picture.Bitmap.Height / vImage.Picture.Bitmap.Width < 0.75 then begin if vImage.Picture.Bitmap.Width >= ScreenX then begin vImage.Canvas.StretchDraw(Rect(0,0,ScreenX,round(vImage.Picture.Bitmap.Height * ScreenX/vImage.Picture.Bitmap.Width)),vImage.Picture.Bitmap); vImage.Center := True; vBitmap3.Height := round(vImage.Picture.Bitmap.Height * ScreenX/vImage.Picture.Bitmap.Width); vBitmap3.Width := ScreenX; vBitmap3.Canvas.CopyRect(Rect(0,0,vBitmap3.Width,vBitmap3.Height), vImage.Canvas, Rect(0, 0, ScreenX, round(vImage.Picture.Bitmap.Height * ScreenX/vImage.Picture.Bitmap.Width))); vBitmap3.SaveToFile(vFileName); end else vImage.Picture.Bitmap.SaveToFile(vFileName); end else begin if vImage.Picture.Bitmap.Height >= ScreenY then begin vImage.Canvas.StretchDraw(Rect(0,0,ScreenX,ScreenY),vImage.Picture.Bitmap); vImage.Center := True; vBitmap3.Width := ScreenX; vBitmap3.Height := ScreenY; vBitmap3.Canvas.CopyRect(Rect(0,0,vBitmap3.Width,vBitmap3.Height), vImage.Canvas, Rect(0,0,ScreenX,ScreenY)); vBitmap3.SaveToFile(vFileName); end else vImage.Picture.Bitmap.SaveToFile(vFileName); end; finally vImage.free; end;end; 估计你的Image1载入的不是BMP文件,要BMP才可以。 image只能载入bmp文件,如果是jpg文件要进行响应的转化。 同意sysu(死树) 和weibz0525(小虫) ,TCanvas只能对位图进行操作 谢谢各位。我的数码相机照的照片要进行处理后转化成Jpeg。已经收钱了。在此谢谢。 SQL乘积运算~~~ 大家这种情况是怎么处理的? 高手请进!! VB6sp6+Delphi7这两种工具能同时安装于XPSP2中吗?? 求救求救,帮我参谋参谋吧 用intraweb做isapi的问题 我在unit1里面定义了一个public变量china,为什么在unit2里面不能用呢?谢谢! 关于动态创建菜单时,动态打开窗口的问题 delphi数据库控件简单问题,100分送上!!! 如何察看生成的SQL语句 小菜鸟的问题:模板问题 如何处理主键值重复错误的处理?
var
vBitmap3: TBitmap;
vImage: TImage;
begin
try
vImage := TImage.Create(self);
vImage.Visible := False;
vImage.AutoSize := true;
vBitmap3 := TBitmap.Create;
if CompareText(vExt, 'Bmp') = 0 then vImage.Picture.LoadFromFile(OpenDialog1.FileName);
if CompareText(vExt, 'Jpg') = 0 then vImage.Picture.LoadFromFile(vFileName);
if vImage.Picture.Bitmap.Height / vImage.Picture.Bitmap.Width > 0.75 then
begin
if vImage.Picture.Bitmap.Height >= ScreenY then
begin
vImage.Canvas.StretchDraw(Rect(0,0,round(vImage.Picture.Bitmap.Width * ScreenY/vImage.Picture.Bitmap.Height),ScreenY),vImage.Picture.Bitmap);
vImage.Center := True;
vBitmap3.Width := round(vImage.Picture.Bitmap.Width * ScreenY/vImage.Picture.Bitmap.Height);
vBitmap3.Height := ScreenY;
vBitmap3.Canvas.CopyRect(Rect(0,0,vBitmap3.Width,vBitmap3.Height), vImage.Canvas, Rect(0,0,round(vImage.Picture.Bitmap.Width * ScreenY/vImage.Picture.Bitmap.Height),ScreenY));
Image2.Canvas, Rect(0,0,Image2.Width,Image2.Height));
end
else
vImage.Picture.Bitmap.SaveToFile(vFileName);
end
else if vImage.Picture.Bitmap.Height / vImage.Picture.Bitmap.Width < 0.75 then
begin
if vImage.Picture.Bitmap.Width >= ScreenX then
begin
vImage.Canvas.StretchDraw(Rect(0,0,ScreenX,round(vImage.Picture.Bitmap.Height * ScreenX/vImage.Picture.Bitmap.Width)),vImage.Picture.Bitmap);
vImage.Center := True;
vBitmap3.Height := round(vImage.Picture.Bitmap.Height * ScreenX/vImage.Picture.Bitmap.Width);
vBitmap3.Width := ScreenX;
vBitmap3.Canvas.CopyRect(Rect(0,0,vBitmap3.Width,vBitmap3.Height), vImage.Canvas, Rect(0, 0, ScreenX, round(vImage.Picture.Bitmap.Height * ScreenX/vImage.Picture.Bitmap.Width)));
vBitmap3.SaveToFile(vFileName);
end
else
vImage.Picture.Bitmap.SaveToFile(vFileName);
end
else
begin
if vImage.Picture.Bitmap.Height >= ScreenY then
begin
vImage.Canvas.StretchDraw(Rect(0,0,ScreenX,ScreenY),vImage.Picture.Bitmap);
vImage.Center := True;
vBitmap3.Width := ScreenX;
vBitmap3.Height := ScreenY;
vBitmap3.Canvas.CopyRect(Rect(0,0,vBitmap3.Width,vBitmap3.Height), vImage.Canvas, Rect(0,0,ScreenX,ScreenY));
vBitmap3.SaveToFile(vFileName);
end
else
vImage.Picture.Bitmap.SaveToFile(vFileName);
end;
finally
vImage.free;
end;
end;