社区
图形处理/算法
帖子详情
怎样消除图片的锯齿??
yang2003
2004-11-16 11:49:36
我在视图中用 TransparentBlt 显示一张BITMAP(周围显示成透明)但显示出来后有锯齿,请问怎样才能消除它或者能不能用别的图片格式呢(如果是别的格式要怎样做呢?最好能有源码),谢谢各位先!!!!
...全文
1475
9
打赏
收藏
怎样消除图片的锯齿??
我在视图中用 TransparentBlt 显示一张BITMAP(周围显示成透明)但显示出来后有锯齿,请问怎样才能消除它或者能不能用别的图片格式呢(如果是别的格式要怎样做呢?最好能有源码),谢谢各位先!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yang2003
2005-05-26
打赏
举报
回复
谢谢各位!问题早已经解决了,我用的是GDI+
wqs6
2005-04-27
打赏
举报
回复
简单点就是插值
要求再高点
可以看看亚像素方面的知识
Summer006
2005-04-27
打赏
举报
回复
这个抗锯齿算法,我在网上找过,没有相关资料。
后来我自己研究了一下,写了一个模拟抗锯齿的算法,效果还不错~~哈哈
不过处理的对象是2值图。。在目标的周围一层“附”一层过滤点。(没有平滑那么简单哈)
qrlvls
2005-04-26
打赏
举报
回复
非常不容易做啊,呵呵
如果用TransparentBlt就只能这样了
如果你自己在内存中操作DIB的话倒是可以通过简单的图象算法处理一下,判定四向或八向方法对透明色边缘的象素与背景色求均值,这只是一种最简单的反走样思想,不过要做得好的话可不容易
因为是位图所以只有判定象素
如果是矢量图的话可以用 Intel 的图形库
kyh1234567
2005-04-26
打赏
举报
回复
绘制"透明"位图的实际操作步骤是先将位图设备描述表以"SRCINVERT"的方式绘制(BitBlt)到显示设备描述表上,然后将"掩码"位图设备描述表以"SRCAND"的方式绘制(BitBlt)到显示设备描述表上,最后将位图设备描述表以"SRCINVERT"的方式绘制(BitBlt)到显示设备描述表上.这样除"透明色"外的其余位图部分就被绘制到窗口上了,下面是源码:
void CTransparentPicView::DrawTransparent(CDC *pDC, int x, int y, COLORREF crColour)
{
COLORREF crOldBack=pDC->SetBkColor(RGB(255,255,255));
COLORREF crOldText=pDC->SetTextColor(RGB(0,0,0));
CDC dcImage, dcMask;
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP2);
//IDB_BITMAP1是待显示位图的资源ID
BITMAP bm;bmp.GetBitmap(&bm);
int nWidth=bm.bmWidth,nHeight=bm.bmHeight;
//为图像及mask各创建一个DC
dcImage.CreateCompatibleDC(pDC);
dcMask.CreateCompatibleDC(pDC);
//把图像装入image DC
CBitmap* pOldBitmapImage=dcImage.SelectObject(&bmp);
//为“掩码”位图创建一个单色bitmap
CBitmap bitmapMask;
bitmapMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL); //把mask位图装入mask DC
CBitmap* pOldBitmapMask = dcMask.SelectObject(&bitmapMask); //用透明色创建“掩码”位图
dcImage.SetBkColor(crColour);//crColor是位图中的透明色
dcMask.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);//分3步进行实际的绘制
pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
pDC->BitBlt(x, y, nWidth, nHeight, &dcMask, 0, 0, SRCAND);
pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); //恢复原先设置
dcImage.SelectObject(pOldBitmapImage);
dcMask.SelectObject(pOldBitmapMask);
pDC->SetBkColor(crOldBack);
pDC->SetTextColor(crOldText);
}
void CTransparentPicView::OnDraw(CDC* pDC)
{
CTransparentPicDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//画底层位图
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
BITMAP bm;
bmp.GetBitmap(&bm);
int nWidth=bm.bmWidth,nHeight=bm.bmHeight;
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBmp = MemDC.SelectObject(&bmp);
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBmp);
//画上层透明位图
DrawTransparent(pDC,0,0,RGB(0,0,0));
// TODO: add draw code for native data here
}
这样就OK了,试试吧^_^
Featured
2005-04-26
打赏
举报
回复
如果原来只有600×400的分辨率,
你要它能够3000×2000显示,还没有“锯齿”(其实是放大了的象素点),
如果真能实现,
高象素的数码相机还有谁回去买?
当然了,利用插值算法是可以减轻这种状况的
不过图片的质量肯定不咋地了
图片
消除
锯齿
和
图片
锐化
本文介绍了在Java中如何处理
图片
缩放时的
锯齿
问题,通过设置
消除
锯齿
选项和使用平滑缩放。同时,讨论了
图片
锐化的两种方法:拉普拉斯锐化和一阶微分梯度锐化,并给出了相关代码示例。对于锐化处理的效率问题,文章提出了多线程优化的挑战,但由于BufferedImage的setRGB方法同步导致的问题,尝试的优化并未成功。
java awt生成
图片
消除
锯齿
本文介绍了如何使用Java AWT库中的Graphics2D和Image类来实现
图片
的平滑缩放,通过设置RenderingHints为KEY_ANTIALIASING并使用SCALE_SMOOTH模式,有效地
消除
图片
在绘制过程中的
锯齿
现象。最后,使用ImageIO.write方法将处理后的
图片
保存到文件。
关于
图片
锯齿
产生的原因和如何
消除
本文详细介绍了Android中
锯齿
产生的两种常见原因,并提供了相应的解决办法。一种是在使用Canvas绘制位图时通过设置Paint属性实现抗
锯齿
效果;另一种是在进行RotateAnimation时通过对整个Canvas设置滤波器来
消除
锯齿
。
php
图片
消除
锯齿
,ps如何
消除
边缘
锯齿
本文介绍了使用Photoshop(PS)
消除
图像边缘
锯齿
的步骤,包括选择魔棒工具、解锁图层、删除背景、羽化处理等关键操作。通过设置适当的羽化半径,可以使得人像边缘更加柔和,适用于对精度要求高的页面设计。想要了解更多PS技巧,可以参考相关教程。
unity
图片
遮罩有
锯齿
_如何
消除
UGUI Mask遮罩的
锯齿
本文介绍了如何解决Unity中UGUI Mask组件导致的
图片
遮罩
锯齿
问题。除了尝试使用RectMask2D,作者选择通过编写自定义Shader来实现平滑遮罩效果,提供了一段具体的Shader代码示例,适用于需要RawImage的情况。
图形处理/算法
19,465
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章