在网上看到一个让 Image 缩放的最简单的方法,使用的时候遇到些小问题,请助

时间:2022-12-19 19:34:51
放大的算法如下:
procedure TForm1.ToolButton7Click(Sender: TObject);
begin
  with Image1 do
  begin
    AutoSize:= false;
    Stretch:= true;
    Transparent:=true;
    Height:= round(Height*0.5);
    Width:= round(Width*0.5);
    PicState:= psOther;
  end;
end;

实现起来相当简单,但是问题是,我希望图片是部分透明掉的,但是当AutoSize:= false;的时候,图象是放大了,但是原先透明掉的颜色又变成不透明的了。
而且发现很奇怪的问题,某些图象放大后形状基本不失真,效果很好,但是某些图象变得只剩外行看得出,里面的点全变成一种颜色涂鸦上去的,有人知道怎么回事怎么解决这个问题吗?

10 个解决方案

#1


上面的代码应该是缩小啦,放大是
    Height:= round(Height*1.5);
    Width:= round(Width*1.5);

#2


没见过,顶下吧

#3


顶起,还有一个DBGridEh ,如何让滚轮滚动的时候,当前数据记录不要变(只响应滚动条的拉动)。这个问题也是拖了好久没解决,悲惨

#4


位图放大要特殊处理的.

#5


某些图象放大后形状基本不失真,效果很好,但是某些图象变得只剩外行看得出,里面的点全变成一种颜色涂鸦上去的。
-----------------------------------------
这个应该是把图象(转化到位图)的边局最长的颜色 给 透明了。引起的…… 本人理解的

#6


vividw(vividw)能具体说下位图放大的特殊处理吗?或者贴点简单的代码参考下?

hangzhou_hammer() ,直接设置 Image 的Transparent 为 true,图片是按左上角那一点来进行透明的是吧?你说的 把图象(转化到位图)的边局最长的颜色 给 透明了 我不是很清楚是什么意思

#7


位图缩放 都会有损 需要处理的

可以用 gdi函数试试效果
BitBlt 或者 
stretchdibits
SetStretchBltMode

#8


Picture.Bitmap.TransparentColor := clBlack
//默认是按左下角的点,为透明色
//大小改变后,左下角点的颜色也许改变了
//所有需要指定一下

有些图调整颜色数看看
Picture.Bitmap.PixelFormat := pf24bit;

#9


多谢zswang(伴水清清),
原先的透明色放大后变得很奇怪
设置了 Picture.Bitmap.TransparentColor := clBlack 后透明色没变了。
我想透明掉的颜色是(R:0,G:255,B:0),不是对应的设置成
Image[i].Picture.Bitmap.TransparentColor:=clGreen; 吗?怎么不能透明掉?

另外关于图片有时候整张变得很怪的问题,加了 Picture.Bitmap.PixelFormat := pf24bit; 已经解决,谢谢

#10


zswang(伴水清清)(专家门诊清洁工) ( 四星(高级)) 信誉:175  2006-9-19 10:28:56  得分:50


Picture.Bitmap.TransparentColor := clBlack
//默认是按左下角的点,为透明色
===================
UP !有理 [测试了]

#1


上面的代码应该是缩小啦,放大是
    Height:= round(Height*1.5);
    Width:= round(Width*1.5);

#2


没见过,顶下吧

#3


顶起,还有一个DBGridEh ,如何让滚轮滚动的时候,当前数据记录不要变(只响应滚动条的拉动)。这个问题也是拖了好久没解决,悲惨

#4


位图放大要特殊处理的.

#5


某些图象放大后形状基本不失真,效果很好,但是某些图象变得只剩外行看得出,里面的点全变成一种颜色涂鸦上去的。
-----------------------------------------
这个应该是把图象(转化到位图)的边局最长的颜色 给 透明了。引起的…… 本人理解的

#6


vividw(vividw)能具体说下位图放大的特殊处理吗?或者贴点简单的代码参考下?

hangzhou_hammer() ,直接设置 Image 的Transparent 为 true,图片是按左上角那一点来进行透明的是吧?你说的 把图象(转化到位图)的边局最长的颜色 给 透明了 我不是很清楚是什么意思

#7


位图缩放 都会有损 需要处理的

可以用 gdi函数试试效果
BitBlt 或者 
stretchdibits
SetStretchBltMode

#8


Picture.Bitmap.TransparentColor := clBlack
//默认是按左下角的点,为透明色
//大小改变后,左下角点的颜色也许改变了
//所有需要指定一下

有些图调整颜色数看看
Picture.Bitmap.PixelFormat := pf24bit;

#9


多谢zswang(伴水清清),
原先的透明色放大后变得很奇怪
设置了 Picture.Bitmap.TransparentColor := clBlack 后透明色没变了。
我想透明掉的颜色是(R:0,G:255,B:0),不是对应的设置成
Image[i].Picture.Bitmap.TransparentColor:=clGreen; 吗?怎么不能透明掉?

另外关于图片有时候整张变得很怪的问题,加了 Picture.Bitmap.PixelFormat := pf24bit; 已经解决,谢谢

#10


zswang(伴水清清)(专家门诊清洁工) ( 四星(高级)) 信誉:175  2006-9-19 10:28:56  得分:50


Picture.Bitmap.TransparentColor := clBlack
//默认是按左下角的点,为透明色
===================
UP !有理 [测试了]