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/

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

  1. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    前言   上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤.   受限制   因为直接配置sample的vi比较麻烦 ...

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

    一般想从容器中获取对象,我们都是通过构造方法获取对象,但有些条件不允许不能通过构造方法获取对象,我们必须单独从容器中单独创建获取找个对象,这样我们就不行把找个容器静态保存起来供全局diaoy 一. 简 ...

  3. java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)

    interface接口参数 jdk1.7及以前使用spring功能实现的: 注意: 1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名. public static void test() ...

  4. ASP.NET 4.0 ListView等容器控件中获取ClientID值与HTML中自动生成ID字符串不一样问题。

    ASP.NET 4.0 中 ClientIDMode的属性 可以设置获取不同ID格式的值. 项目中遇到的问题: 1.ListView1 ItemDataBound事件中,获取ClientID结果与自动 ...

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

    final int[] location = new int[2]; view.getLocationOnScreen(location); final int[] location = new in ...

  6. 【2017-06-27】Js中获取地址栏参数、Js中字符串截取

    一.Js中获取地址栏参数 //从地址栏获取想要的参数 function GetQueryString(name) { var reg = new RegExp("(^|&)" ...

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

    文章概述: 本演示介绍怎样在WPF的MVVM框架中.通过数据绑定的方式获取下拉列表中的选中项.程序执行后的效果例如以下图所看到的: 相关下载(代码.屏幕录像):http://pan.baidu.com ...

  8. sitecore开发入门之如何在代码中获取SITECORE图像URL

    using Sitecore; using Sitecore.Data.Items; using Sitecore.Resources.Media; public string GetUrl() { ...

  9. e664. 在图像中获取子图像

    // From an Image image = createImage(new FilteredImageSource(image.getSource(), new CropImageFilter( ...

随机推荐

  1. ubuntu18.10安装网易云音乐

    1.到网易云官网下载安装包(在18.10双击安装包没能安装成功,于是使用命令行) 2.执行安装命令 sudo dpkg -i 名称,这时会提示缺少依赖gconf-service等,提示执行命令,照做就 ...

  2. pyqt5猜数小程序

    程序界面用qt设计师制作,并用pyuic5命令转换成form.py文件 #-*- coding:utf-8 -*- from PyQt5.QtWidgets import QApplication,Q ...

  3. LoadRunner 11简单使用

    LoadRunner 11简单使用 开始菜单-->HP LoadRunner-->applications--->virtual user Generator 1>新建--&g ...

  4. 安装 Git

    是时候动手尝试下 Git 了,不过得先安装好它.有许多种安装方式,主要分为两种,一种是通过编译源代码来安装:另一种是使用为特定平台预编译好的安装包. 从源代码安装 若是条件允许,从源代码安装有很多好处 ...

  5. 深度学习常用数据集 API(包括 Fashion MNIST)

    基准数据集 深度学习中经常会使用一些基准数据集进行一些测试.其中 MNIST, Cifar 10, cifar100, Fashion-MNIST 数据集常常被人们拿来当作练手的数据集.为了方便,诸如 ...

  6. Python发送带附件的邮件

    看别人的博客就不要在往别人的邮箱里发东西了行不行, 有点素质可以吗!!! 写出来分享还不知道珍惜!!!!! #-*-encoding:utf-8 -*- import os import smtpli ...

  7. Linux内核中断处理机制

    <什么是中断> 计算停下当前处理任务,并保存现场,转而去处理其他是任务,当完成任务后再回到原来的任务中去. <中断的分类> a:软中断     软中断时执行中断指令产生的,软中 ...

  8. hdu 2476 区间dp

    题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...

  9. Codeforces Round #196 (Div. 2) A. Puzzles 水题

    A. Puzzles Time Limit: 2 Sec  Memory Limit: 60 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...

  10. poj 2623 Sequence Median 堆的灵活运用

    I - Sequence Median Time Limit:1000MS     Memory Limit:1024KB     64bit IO Format:%I64d & %I64u ...