位图缩放问题(100分)

  • 主题发起人 主题发起人 wjqdelphi
  • 开始时间 开始时间
W

wjqdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我画的800×600的bmp图,放在400×300的image控件中显示,怎样解决bmp图像一些失真现象(一些线条显示不出来)
 
这个没有好办法!你可以到photoshow中去解决!或者找个第三方控件!
 
还是第三方控件吧,效果好些,或者
SetStretchBltMode(Bmp.Canvas.Handle, HalfTone);
stretchblt();
 
那能推荐几个第三方控件吗?
 
看看fastbmp,很不错
 
用ImageEn这套控件,你会有意想不到的收获。
我己上传到这个地址:http://service.lonetear.com/delphi/downfile.asp?ID=1376
 
你是2:1,这比较简单
分离出相邻4点的R G B 值,分别对R G B值求平均值,然后把R G B值合成,写入一点即可。
如果不是2:1,则要根据系数取整来计算点的位置,并根据偏差取不同的比例。
 
也许zhu_jy的方法可行,不过不是很方便
 
to zhu_jy:
小弟还是不解,能否给个例子?
 
你看看那本vc图象处理,何斌
上面讲的比较详细
 
多谢各位指点.
 
procedure new;
var i,j:integer;
R,G,B:integer;
x,y:real;
px,py:integer;
p1,p2,p3,p4:longint;
begin
for i:=0 to 300-1 do
begin
py:=trunc(i*x+0.5);
for j:=0 to 400-1 do
begin
px:=trunc(j*y+0.5);
p1:=map.Canvas.Pixels[px ,py ];
p2:=map.canvas.pixels[px+1,py ];
p3:=map.canvas.pixels[px ,py+1];
p4:=map.canvas.pixels[px+1,py ];
R:=((p1 and $FF0000)+(p2 and $FF0000)+(p3 and $FF0000)+(p4 and $FF0000)) shr 18;
G:=((p1 and $FF00)+(p2 and $FF00)+(p3 and $FF00)+(p4 and $FF00)) shr 10;
B:=((p1 and $FF)+(p2 and $FF)+(p3 and $FF)+(p4 and $FF)) shr 2;
map1.Canvas.Pixels[j,i]:=(R shl 16)+(G shl 8)+B;
end;
end;
end;
 
我运行时怎么提示“invalid floating point operation”?
 
procedure new;//简化版
var i,j:integer;
R,G,B:integer;
p1,p2,p3,p4:longint;
begin
for i:=0 to 300-1 do
for j:=0 to 400-1 do
begin
p1:=map.Canvas.Pixels[j*2 ,i*2 ];
p2:=map.canvas.pixels[j*2+1,i*2 ];
p3:=map.canvas.pixels[j*2 ,i*2+1];
p4:=map.canvas.pixels[j*2+1,i*2 ];
R:=((p1 and $FF0000)+(p2 and $FF0000)+(p3 and $FF0000)+(p4 and $FF0000)) shr 18;
G:=((p1 and $FF00)+(p2 and $FF00)+(p3 and $FF00)+(p4 and $FF00)) shr 10;
B:=((p1 and $FF)+(p2 and $FF)+(p3 and $FF)+(p4 and $FF)) shr 2;
map1.Canvas.Pixels[j,i]:=(R shl 16)+(G shl 8)+B;
end;
end;
end;
 
可以用Image控件来实现。
 
后退
顶部