LibGdx中使用非2的N次幂尺寸的图片

Libgdx关于载入图片规格的问题

  对于libgdx来说,对载入的图片要求是:宽高都必须是2的N次幂的图片才行,否则会提示:texture width and height must be powers of two。

那么,如何使用非2的N次幂尺寸的图片呢,使用以下函数:

import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
// 如工程目录assets/texture/001.png下: filePath = "texture/001.png"

/** 载入任意尺寸的图像,创建Texture */
public static Texture loadTexture(String filePath)
{
	Pixmap pic = new Pixmap(Gdx.files.internal(filePath));
	pic = Format2power(pic);	// 图像尺寸转化为2的幂
	return new Texture(pic);	// 从Pixmap构建Texture
}

/** 将Pic转化为尺寸为2的幂的图像 */
public static Pixmap Format2power(Pixmap Pic)
{

	int width = Pic.getWidth(), height = Pic.getHeight();	// 获取图像的尺寸

	Pixmap image = new Pixmap(closestTwoPower(width), closestTwoPower(height), Format.RGBA8888);
	if (image.getWidth() == width && image.getHeight() == height) return image;	// 若原图像尺寸为2的幂,则直接返回原图像

	int color;
	for (int i = 0; i < width; i++)
	{
		for (int j = 0; j < height; j++)
		{
			color = Pic.getPixel(i, j);		// 原图像像素信息
			image.drawPixel(i, j, color);	// 生成图像
		}
	}
	return image;
}

/** 获取最接近于n的2的幂 */
public static int closestTwoPower(int n)
{
	int power = 1;
	while (power < n)
		power <<= 1;
	return power;
}
时间: 2024-10-12 21:22:11

LibGdx中使用非2的N次幂尺寸的图片的相关文章

回调函数中调用类中的非静态成员变量或非静态成员函数

有关这方面的问题,首先说一点: 回调函数必须是静态成员函数或者全局函数来实现回调函数,大概原因是普通的C++成员函数都隐含了一个函数参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问类的特定对象的数据成员.由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含的this指针问题使得函数参数个数不匹配,从而导致回调函数编译失败. 基于上面的理论,如何在类中封装回调函数呢? 回调函数只能是全局函数或者静态成员函数,但是由于全局函数会破坏封装性,所以只能用静

C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字

/// 去掉字符串中的数字 public static string RemoveNumber(string key)          {              return Regex.Replace(key, @"\d", "");          } //去掉字符串中的非数字public static string RemoveNotNumber(string key)  {      return Regex.Replace(key, @"

二叉树先序中序非递归算法

一直想要写的 二叉树 中序 先序 后序遍历算法 当年学习DS最虚的就是这个,因为非递归算法复杂,测试数据不好弄,只能一个一个手动插入.感觉明显比图的难,虽然大家都觉得图更难..... 递归的太简单了,就不写了.关键是非递归版本. 先序: 我自己的版本: void RootPreTraverse(Node* p) { Stack S; while(S not empty) { p=S.top(); S.pop(); Show(p); if(p->right!=null) S.push(p->ri

深入理解Libgdx中的Skin类

本文不是直接翻译...本文在Libgdx的官方wiki的基础上,加上一些自己的理解.所以,难免会一些甚至是很多的理解很片面的东西.写的不好,还请见谅.... 其实 其实,在LibGDX的官方文档对Skin这个类的介绍中,其主要介绍了以下几个方面: 1.往Skin里面添加资源的两种方式. 2.从Skin中获取资源的方式. 第一种方式:以atlas为操作对象: atlas = new TextureAtlas(Gdx.files.internal("meijia.atlas"), Gdx.

Libgdx中TextButton的一些思考

因为有要实现以下TextButton的这个需求.然后就去看了一下Libgdx中文档.游戏中的按钮,很多人都比较习惯使用换图片的方式来实现.很少有人会直接使用libgdx中的TextButton,如果实在不行也是自己去写一个TextButton的类. 抱着"它真的有那么渣的态度吗",我去看了一下libgdx自带的TextButton.以下是我的思考的轨迹.整理如下: 在现在,libgdx的资料那么少,有的那些资料也是比较基础的.抱着"看别人的,还不如自己去官方文档."

canny中的非极大抑制

canny边缘检测首先对图像做高斯滤波和生成梯度图,得到的梯度图中,边缘的宽度可能大于一个象素,nonmaxima suppression的过程是沿着边缘的梯度方向进行检测,把不是局部最大值的象素置0,这样得到了只有一个象素宽度的边缘. 所以nonmaxima suppression的作用是将梯度图中的边缘细化成一个象素宽度. canny中的非极大抑制,布布扣,bubuko.com

【Python】Python在文本分析中将中文和非中文进行分割

1.问题描述 进行文本分析的时候需要将中文和非中文进行分开处理,下面通过Python将文本中的中文部分提取出来进行需要的处理. 2.问题解决 开发环境:Linux 程序代码如下:split.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf8") import re #导入正则表达式模块:re模块 def translate(inputFile, ou

JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词

例如输入:I love programming 输出:I evol gnimmargorp 算法思路就是:根据空格提取每一个单词,存放在一个buffer里进行翻转处理,再添加到新的字符串.最后新的字符串就完成整个方法过程. public class ReserveString { public String reserve(String sentence){ String backS = new String(); StringBuffer temp = new StringBuffer();

C++ 中判断非空的错误指针

最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的指针,这可能是接收数据不对应产生的问题解决思路如下: 1.对返回值长度进行判断,如果超过项目内最大的返回值就直接return(比如我项目内的最大返回值为5000,哪么我设定的值为10000); 2.对char指针进行判断,由于这里返回的数据是有的,只是解析不出来而已,这里就是一个非空的错误指针,所以