Html5 中获取镜像图像 - 解决 WebGL 中纹理倒置问题

太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的漂亮人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino。否则,出自本博客的文章拒绝转载或再转载。谢谢合作。

我等 Web 前端之外行,解决起来这类问题,确实有些辣手!

幸好,还能查到一些实用的资料,外加之前在 iOS 中对 UIKit 与 QuarzCore 以及 OpenGLES 中图像倒置问题的研究过程中积累的一些图像处理知识,

将网上这些资料进行有机组合,得出例如以下还算有份量的(至少对我来说是有份量的)一段代码。

昨天,通过  photoshop 把图像倒过来之后,确实解决这个问题了。只是日后人家提供的图像。也不能老由我来转,

另外。当代码不在我的掌控之下时。又得解释一些无端的废话,引来不必要的麻烦。

索性。把问题消灭在萌芽之中,尽量远离漩涡为好。

一个独立的函数,输入參数是镜像前的图像。输出參数是镜像后的图像,

本函数临时仅仅支持水平镜像,垂直镜像,仅仅要将 scale 和 translate 的參数作对应改变,当前演示样例,是对 y 进行处理,那么垂直镜像就要对 x 坐标进行处理:

function mirrorImage(orgImage) {

    var imageWidth = orgImage.width;
    var imageHeight = orgImage.height;

    var tempCanvas = document.createElement(‘canvas‘);
    tempCanvas.width = imageWidth;
    tempCanvas.height = imageHeight;

    var context = tempCanvas.getContext("2d");
    context.scale(1, -1);
    context.translate(0, -imageHeight);
    context.drawImage(orgImage, 0, 0);
    var flipImage = context.getImageData(0, 0, imageWidth, imageHeight);

    return flipImage;
}

调用方法例如以下:

    var backwalltex = THREE.ImageUtils.loadTexture(‘2的次幂的图片.jpg‘);
    backwalltex.image = mirrorImage(backwalltex.image);

參考资料:

http://www.html5canvastutorials.com/advanced/html5-canvas-mirror-transform-tutorial/

http://www.zeali.net/mirrors/html5canvastutorials/advanced/html5-canvas-transform-scale-tutorial/index.html

http://www.html5canvastutorials.com/advanced/html5-canvas-get-image-data-tutorial/

时间: 2024-10-01 11:36:25

Html5 中获取镜像图像 - 解决 WebGL 中纹理倒置问题的相关文章

asp.net core不通过构造方法从容器中获取对象及解决通过这种方法NLog获取对象失败的问题

一般想从容器中获取对象,我们都是通过构造方法获取对象,但有些条件不允许不能通过构造方法获取对象,我们必须单独从容器中单独创建获取找个对象,这样我们就不行把找个容器静态保存起来供全局diaoy 一. 简单些一下步骤如下:(从某一个大神视频或者代码中学习到的,具体哪个不记得了) 1.先做一个构建对象的接口IEngine public interface IEngine { /// <summary> /// 构建一个实例 /// </summary> /// <typeparam

在WPF的MVVM框架中获取下拉选择列表中的选中项

文章概述: 本演示介绍如何在WPF的MVVM框架中,通过数据绑定的方式获取下拉列表中的选中项.程序运行后的效果如下图所示: 相关下载(代码.屏幕录像):http://pan.baidu.com/s/1sjwN357 在线播放:http://v.youku.com/v_show/id_XODA5OTYzMDU2.html 温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到[email protected] XAML代码如下所示: <Window x:Class="Demo02E

android 中获取当前焦点所在屏幕中的位置 view.getLocationOnScreen(location)

  View view = getCurrentFocus();//获得当前焦点所在的view. Java代码 final int[] location = new int[2]; view.getLocationOnScreen(location); [java] view plaincopy final int[] location = new int[2]; view.getLocationOnScreen(location); 这样就可以得到该视图在全局坐标系中的x,y值,(注意这个值是

e664. 在图像中获取子图像

// From an Image image = createImage(new FilteredImageSource(image.getSource(), new CropImageFilter(x, y, w, h))); // From a BufferedImage bufferedImage = bufferedImage.getSubimage(x, y, w, h); Related Examples 原文地址:https://www.cnblogs.com/borter/p/9

requests从api中获取数据并存放到mysql中

python的requests库是一个非常强大的库,requests的安装方法十分简单,用: pip install requests 即可安装requests,安装成功后: import requests 即可导入requests模块,requests有get和post两种方法: 1.requests.get()用法: url = "http://xxx" a_content = requests.get(url) aa = a_content.content #.content和.

ajax异步处理时,如何在JS中获取从Servlet或者Action中session,request

ssh项目中,我需要登陆某个页面(如a.jsp),通过onblur()鼠标失去焦点后来触发js函数(函数是ajax请求)请求到相应的action,处理完成后将数据存放到session对象里面,然后在a.jsp中用el表达式获取想要的数据.可是问题来了,不知道为什么在打开浏览器第一次登录a页面时,a页面不会显示想要的数据,刷新后就有数据了,之后也正常. 后来查询了各种博客,各种网上的一些说法,最后总结出了自己的一套思路,仅供参考. 以下是在Action中 根据用户id查询出用户信息 .......

solr入门之多线程操作solr中索引字段的解决

涉及的问题: 建索引时有一个字段是该词语出现的次数,这个字段是放在solr里的 而我用的是多线程来进行全量导入的,这里就涉及到了多线程问题 多个线程操作同一个变量时如何处理? 我是这样子做的 : 首先将变量本地话--分布式就放到大容器中,我这里仅仅使用了一个map来存 词和次数的关系映射 变量本地化后就是多线程的解决了--锁的设置-我仅仅是在操作时加了一个锁来解决这个问题 这样做后总体上应该能解决变量的问题了 最后还有一个线程顺序问题要解决下 当 最后一个提交索引时 获取的索引不一定是正确的索引

Azure Stack中添加镜像

在微软最新推出的混合云架构中,Azure Stack 环境中服务的提供者或运营者从微软变成了 Azure Stack 集成环境的运营者,通过 Azure Stack 的 MarketPlace,我们可以根据用户的特定需求,提供一些定制化的应用,获得与公有云不一样的用户体验.本文将主要介绍如何在 Azure Stack 的 MarketPlace 中如何添加一个自定义的虚拟机镜像并定制满足需求的 Gallery Item. 在下面的博客中我们将会带大家看一下如何上传Linux镜像.Windows镜

[转]Docker中的镜像

引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的Manjaro. Docker镜像的概念 总的来说,Docker镜像是由文件系统叠加而成的. bootfs 最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导文件系统有什么交互.实际上,当一个容器启动后,它将会被移到内存中,而引