加入alpha值双线性缩放算法

所以我想利用双线性插值算法调整图像大小,并添加alpha值也是如此。 我使用的ActionScript 3这样做,但我真的不认为语言是相关的。

下面我有实际的代码的作品真的很好,但边缘围绕“抹去”地区似乎变得更暗。 有没有一个简单的方法是不包含什么,我只能假设是黑色(00000000)时,它的发现它的平均?

码:

x_ratio = theX - x; y_ratio = theY - y; x_opposite = 1 - x_ratio; y_opposite = 1 - y_ratio; a = getPixel32(x, y); be =getPixel32(x + 1, y); c = getPixel32(x, y + 1); d = getPixel32(x + 1, y + 1); alph = (t(a) * x_opposite + t(be) * x_ratio) * y_opposite + (t(c) * x_opposite + t(d) * x_ratio) * y_ratio; red = (r(a) * x_opposite + r(be) * x_ratio) * y_opposite + (r(c) * x_opposite + r(d) * x_ratio) * y_ratio; green = (g(a) * x_opposite + g(be) * x_ratio) * y_opposite + (g(c) * x_opposite + g(d) * x_ratio) * y_ratio; blue = (b(a) * x_opposite + b(be) * x_ratio) * y_opposite + (b(c) * x_opposite + b(d) * x_ratio) * y_ratio;

的效果图:

发布的解决方案代码!

a = getPixel32(x, y); be =getPixel32(x + 1, y); c = getPixel32(x, y + 1); d = getPixel32(x + 1, y + 1); asum = (t(a) + t(be) + t(c) + t(d)) / 4; alph = (t(a) * x_opposite + t(be) * x_ratio) * y_opposite + (t(c) * x_opposite + t(d) * x_ratio) * y_ratio; red = ((r(a) * t(a) * x_opposite + r(be) * t(be) * x_ratio) * y_opposite + (r(c) * t(c) * x_opposite + r(d) * t(d) * x_ratio) * y_ratio); red = (asum > 0) ? red / asum : 0; green = ((g(a) * t(a) * x_opposite + g(be) * t(be) * x_ratio) * y_opposite + (g(c) * t(c) * x_opposite + g(d) * t(d) * x_ratio) * y_ratio); green = (asum > 0) ? green / asum : 0; blue = ((b(a) * t(a) * x_opposite + b(be) * t(be) * x_ratio) * y_opposite + (b(c) * t(c) * x_opposite + b(d) * t(d) * x_ratio) * y_ratio); blue = (asum > 0) ? blue / asum : 0;

--------------解决方案-------------

你需要当你完成了最后的阿尔法与他们合作之前,乘以你的每个R,G,B值由相应的α,然后除以值。 这很容易想象的效果,这将有当像素中的一个具有零阿尔法 - 每个的R,G,B值将被零相乘,因此它不会不管他们的原始值了! 它们不会有助于最终结果。

你需要添加一个检查,让你永远除以零,并确保舍入误差不会把你的最终值超过上限。

常图像将被存储在存储器中与α已经乘以入R,G,B值 - 这被称为预乘alpha(维基百科参考)。

这是那些地方使用预乘alpha是一个巨大的优势之一。 随着预乘阿尔法,你可以把你的形象的RGB分量作为预先已预先合成的黑色。

这消除了许多与关于与图像的α任何种类的图像处理有关的麻烦的效果,以及给予更快合成算法。

对于“非预乘阿尔法”,熟悉LIRP(线性插值)合成算法是

d = Kf + (1-K)b

...其中K是前景的α,f是前景值,b是背景。

对于“预乘Alpha”,你用

d = f + (1-K)b

...这消除一个乘法,它可以使该过程快(和更便宜的硬件实现)。 阅读的关键文件是波特和达夫的 - “合成数字图像”

如果您使用的是Windows,在Win32的AlphaBlend函数需要预乘α,所以这是很好的留在预乘域只要有可能。

分类: 时间:2012-01-01 人气:0
分享到:

相关文章

  • 图像裁剪和Android中调整 2012-03-14

    我也跟着下面的说明,裁剪图像. http://coderzheaven.com/index.php/2011/03/crop-an-image-in-android/ 最终裁切位图图像的高度和宽度均大于屏幕的大. 在调整大小和作物进程,内存不足的错误被抛出和应用程序被强制退出. 错误日志: 04-09 11:37:28.658: ERROR/dalvikvm-heap(4003): 435176-byte external allocation too large for this proces

  • 在窗口的100%的背景图像(以及它会调整) 2012-01-07

    重复的: 拉伸和缩放CSS背景 我如何拉伸背景图像覆盖整个HTML元素? 背景图片doesn’吨拉伸整个页面宽度 我有一个网页的背景图片,这需要在窗口大小的100%完全显示. 如果调整窗口的大小,将图像需要调整它,保持在100%. CSS不允许您设置背景图片的大小,只有它的方式重复. (但我想它拉伸) 我认为jQuery是意识到这一点,克服浏览器incompatibleness的最安全,最快捷的方式. 或者可以这样用常规的JavaScript迅速完成? --------------解决方案-

  • 选择图像的形式DATEBASE并调整其大小 2012-06-28

    下面的代码将调整图像尺寸50 * 50,但每当我选择在我的数据库中的图像的名字,并把它像这些$ =文件名"文件夹/ $ imagename'; 它不工作,我该如何解决这些. <?php $filename = 'folder/Aizen.jpg'; $width = 50; $height = 50; header('Content-type: image/jpeg'); list($width_orig, $height_orig) = getimagesize($filename);

  • Django管理上传图像到S3,然后调整图片的大小,节省了大拇指问题 2012-11-13

    我尝试错误上传和调整图像与PIL和botos3和Django的default_storage到S3后有错误. 我试图做到这一点就保存在管理. 这里是代码: from django.db import models from django.forms import CheckboxSelectMultiple import tempfile from django.conf import settings from django.core.files.base import ContentFile

  • 绘制图像到面板的控制调整时给文物 2013-03-23

    我目前正在做什么,我认为将是一个简单的任务: 绘制图像到的整个区域Panel中的Windows窗体控件 . (请忽略我可以使用瞬间BackgroundImage属性) 绘制图像看起来是这样的: 即一个黄色的盒子周围的1个像素的蓝色框架. 要画,我使用的Paint的事件Panel控制: private void panel1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawImage(Resources.MyImage, panel1

  • 如何图像Facebook的手柄大小调整 2013-04-03

    您好我建立一个社交网络与Facebook类似,我真的需要就如何处理图像在我的网站一些帮助. 我想知道Facebook这样的网站如何管理他们的图像的大小调整. 一个例子是在寻找某人的相册. 长度和宽度不只是简单的改变. 他们正在做的更专业的方式,使图像看起来仍然清晰,不伸. 他们使用这种专用工具. 另一个例子是配置文件图片时,他们将被加载到的消息墙. 你的好友资料图片居中并且相应地裁剪,然后重新调整大小. 他们如何去这样做. 任何帮助将不胜感激. --------------解决方案-------

  • 最理想的图像大小为eshopo和调整? 2013-09-13

    我目前正在开发一个电子商务网站,其中ofcourse包含图像的每个产品. 使用的布局需要3个不同的图像大小; 产品概述尺寸:W:203,H:186主图像产品页面:W:471,H:260缩略图上的产品页面:W:90,H:84(全像素大小). 我们的目标是一个只能上传1张图像 - 然后我调整大小的脚本应该只能够将图像调整到所需,和预定义的,大小. 我已经试了又试,以找到最佳的大小,但没有规模,将调整为上述所有的大小 - 所以也许我需要改变一些上面的大小? 而这将是完美的凝视点 - 即. 什么大小应与

  • 为什么一个自定义的UIButton图像没有在界面生成器调整? 2013-09-24

    为什么一个自定义的UIButton图像不与按钮调整? 我设置其视图模式扩展到在Interface Builder 填写 ,但不像一个UIImageView的形象,它不尊重该设置. 我是不是找错了地方或者是不可能的? --------------解决方案------------- 虽然这可能不是完全是你之后-背景图像不会缩放. 尝试这个: [button setImage:image forState:UIControlStateNormal]; button.contentVerticalAli

  • 浏览器性能相结合的图像与动画运动时调整 2013-10-08

    我一直负责转换Flash动画转换成HTML的工作. 动画是相当复杂的,并且需要有必要从位置(x,y)的移动的多个图像(9)至位置(X2,Y2)的同时,从215px增加图像尺寸宽930px宽. 而这样做的动画只有1-2图像的一些初步测试,我注意到这个动画的FF处理大量的抖动现象的. 尝试找出问题,我删除了动画的动态调整大小和刚刚搬到从A点到B点. 什么是有趣的是,我看到了同样的行为时,只需移动被调整到215px(通过CSS的宽度或内联width属性)一个930px形象. 当我尝试同样的动画以不同的

  • 图像的GDI在.NET调整给低饱和度 2014-03-22

    我打了一个问题,我调整大小的图像失去色彩饱和度时,我操纵它们使用GDI. 我加载一个JPG作为原始,调整其大小和所得到的图像具有少了很多的饱和度(颜色强度)比原始图象. 我能做些什么来改善呢? 这是我的代码: 使用(VAR原= System.Drawing.Image.FromStream(新的MemoryStream(image.RawData))){使用(VAR DST =新位图(宽度,高度,PixelFormat.Format32bppArgb)){使用(VAR G = Graphics.

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.490 (s). 10 q(s)