图像拉伸马赛克的处理方法?来者有分。 如何解决图像因为拉伸所造成的马赛克现象。就如低分辨率的图片放到高分辨率下全屏时,图像效果很差,明显得颗粒状。有什么办法可以让其看得清晰一些,颗粒的边界模糊一些? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 tO:hnhb(死鸟)矢量图就不叫那个什么什么的“图像”了。 如 xiaoxiao197821(你的笑对我很重要) 所说还是用此笨方法吧,不然说不定图像效果都不是很好。 xiaoxiao197821(你的笑对我很重要).不行,图像来自实时视频流。 对来自实时视频流的图像,没有好方法对静止图像可采用插值等方法,效果很好,网上有方面资料,自己查查 Web:http://www.dapha.net Web:http://www.5ivb.net BBS:http://www.dapha.net/bbs"最快的图像平滑缩放程序.zip" 拉伸时用下面的API函数StretchBlt,效果好一些:procedure ZoomBmp(imagen: TBitmap; dWidth, dHeight: Integer; var des: TBitmap);var ori: TBitmap; dispositivo_o, dispositivo_d: HDC; pepito: HBitmap;begin ori := Tbitmap.Create; des := TBItmap.Create; ori.handle := imagen.handle; des.width := dWidth; des.height := dHeight; dispositivo_o := CreateCompatibleDC(0); dispositivo_d := CreateCompatibleDC(0); SelectObject(dispositivo_o, ori.handle); pepito := SelectObject(dispositivo_d, des.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;如果觉得效果还是不行,就用一下AntiAlias算法,它可以达到边界模糊:uses math;procedure AntiAliasRect(clip: tbitmap; XOrigin, YOrigin, XFinal, YFinal: Integer);var Memo, x, y: Integer; (* Composantes primaires des points environnants *) p0, p1, p2: pbytearray;begin if XFinal < XOrigin then begin Memo := XOrigin; XOrigin := XFinal; XFinal := Memo; end; (* Inversion des valeurs *) if YFinal < YOrigin then begin Memo := YOrigin; YOrigin := YFinal; YFinal := Memo; end; (* si diff俽ence n俫ative*) XOrigin := max(1, XOrigin); YOrigin := max(1, YOrigin); XFinal := min(clip.width - 2, XFinal); YFinal := min(clip.height - 2, YFinal); clip.PixelFormat := pf24bit; for y := YOrigin to YFinal do begin p0 := clip.ScanLine[y - 1]; p1 := clip.scanline[y]; p2 := clip.ScanLine[y + 1]; for x := XOrigin to XFinal do begin p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3]) div 4; p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] + p1[(x + 1) * 3 + 1]) div 4; p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] + p1[(x + 1) * 3 + 2]) div 4; end; end;end; 建议楼主找个PicShow3.X看看,图像显示控件,是delphi源码。 http://www.delphiarea.com/products/#TPicShow_TDBPicShow 回复人: YFLK(远方来客) ( ) 信誉:100 2004-01-11 10:24:00 得分:0 对来自实时视频流的图像,没有好方法对静止图像可采用插值等方法,效果很好,网上有方面资料,自己查查 Web:http://www.dapha.net Web:http://www.5ivb.net BBS:http://www.dapha.net/bbs"最快的图像平滑缩放程序.zip"===============================================================哈哈那是我写的 谁有游戏外挂编写教程? 赚分,让我沉吧~~~ 是否利用串口打印,计算机就不用安装打印机驱动了吗? 求判断某条记录出现的次数 放分200支持menggirl做版主 -- 戏子 谁给讲讲多线程!进着有分! 各位仁兄,有事请教。 帮忙看下为什么下面的代码不能在腾讯通SKD里发送即时消息呢? 我想通过网络实现对另一台机器的特定区域,出发一个按键动作,或鼠标单击动作怎么办?? 请问如何判断用户在TEdit中输入的是否小数或整数类型?另外,能否限定用户只能输入小数? 祝大家新年快乐 没人来了? 下
矢量图就不叫那个什么什么的“图像”了。
对静止图像可采用插值等方法,效果很好,网上有方面资料,自己查查
Web:http://www.dapha.net
Web:http://www.5ivb.net
BBS:http://www.dapha.net/bbs
"最快的图像平滑缩放程序.zip"
procedure ZoomBmp(imagen: TBitmap; dWidth, dHeight: Integer; var des: TBitmap);
var
ori: TBitmap;
dispositivo_o, dispositivo_d: HDC;
pepito: HBitmap;
begin
ori := Tbitmap.Create;
des := TBItmap.Create;
ori.handle := imagen.handle;
des.width := dWidth;
des.height := dHeight;
dispositivo_o := CreateCompatibleDC(0);
dispositivo_d := CreateCompatibleDC(0);
SelectObject(dispositivo_o, ori.handle);
pepito := SelectObject(dispositivo_d, des.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;如果觉得效果还是不行,就用一下AntiAlias算法,它可以达到边界模糊:
uses
math;procedure AntiAliasRect(clip: tbitmap; XOrigin, YOrigin,
XFinal, YFinal: Integer);
var
Memo, x, y: Integer; (* Composantes primaires des points environnants *)
p0, p1, p2: pbytearray;begin
if XFinal < XOrigin then
begin
Memo := XOrigin;
XOrigin := XFinal;
XFinal := Memo;
end; (* Inversion des valeurs *)
if YFinal < YOrigin then
begin
Memo := YOrigin;
YOrigin := YFinal;
YFinal := Memo;
end; (* si diff俽ence n俫ative*)
XOrigin := max(1, XOrigin);
YOrigin := max(1, YOrigin);
XFinal := min(clip.width - 2, XFinal);
YFinal := min(clip.height - 2, YFinal);
clip.PixelFormat := pf24bit;
for y := YOrigin to YFinal do
begin
p0 := clip.ScanLine[y - 1];
p1 := clip.scanline[y];
p2 := clip.ScanLine[y + 1];
for x := XOrigin to XFinal do
begin
p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3])
div 4;
p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] +
p1[(x + 1) * 3 + 1]) div 4;
p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] +
p1[(x + 1) * 3 + 2]) div 4;
end;
end;
end;
对来自实时视频流的图像,没有好方法
对静止图像可采用插值等方法,效果很好,网上有方面资料,自己查查
Web:http://www.dapha.net
Web:http://www.5ivb.net
BBS:http://www.dapha.net/bbs
"最快的图像平滑缩放程序.zip"===============================================================哈哈
那是我写的