设计游戏的朋友经常会遇到对图片资源的操作。今天浏览web发现此贴不错。所以抄过这边来
原文:
www.linuxmine.com/45911.html
无论在midp1.0还是在 midp2.0中,系统都没有给我们提供对图片进行伸缩操作的api.但是其实我们只要在程序代码中略施小计,就能达到这个效果,只是效果要比美术做出来 的图片,呵呵,差多啦,同时也会造成性能损失。伸缩图片的构造原理就是简单沿x,y轴按比例放缩,比如说我们需要把一张16*16的png图片转化成一张 32*32的图片,那么我们可以先对该图片做一个水平方向上的拉伸操作,然后再把水平拉伸后的图片按垂直方向再做一次拉伸操作。做拉伸操作时,比如水平方 向上,我们需要构造一张32*16的mutable Image,获取其Graphics,利用该Graphics,绘制该mutable Graphics的每一列像素,这一列像素就来自于原始图片中的按比例对应的某一列像素。垂直方向上的拉伸操作也是如法炮制。因为是一种按比例的对应关 系,图像的缩小操作也可按该办法进行。
效果如下图所示
原始图片
图片放大为全屏幕大小
图片缩小为原来的1/4大小
好了,我们来看代码
java 代码
- import javax.microedition.lcdui.Graphics;
- import javax.microedition.lcdui.Image;
-
-
-
-
-
-
-
- public class ImageUtil {
-
-
-
-
-
-
-
-
-
- public static final Image scale (Image srcImage, int newW, int newH) {
- int srcW = srcImage.getWidth();
- int srcH = srcImage.getHeight();
-
- Image tmp = Image.createImage(newW, srcH);
- Graphics g = tmp.getGraphics();
-
- for (int x = 0; x < newW; x++) {
- g.setClip(x, 0, 1, srcH);
-
- g.drawImage(srcImage,x-x*srcWnewW,0,Graphics.LEFT | Graphics.TOP);
-
- }
-
-
- Image dst = Image.createImage(newW, newH);
- g = dst.getGraphics();
-
- for (int y = 0; y < newH; y++) {
- g.setClip(0, y, newW, 1);
-
- g.drawImage(tmp,0,y-y*srcHnewH,Graphics.LEFT | Graphics.TOP);
-
- }
-
- return dst;
- }
-
-
- }
-
- 也许有同学会提出疑问,既然是按x,y方向按等比例放缩,那我写成这样岂不是代码更简洁:
-
- public static final Image scale2(Image srcImage, int newW, int newH) {
- int srcW = srcImage.getWidth();
- int srcH = srcImage.getHeight();
-
- Image dst=Image.createImage(newW,newH);
- Graphics g=dst.getGraphics();
- for (int x = 0; x < newW; x++) {
- for (int y = 0; y < newH; y++) {
- g.setClip(x, y, 1, 1);
- g.drawImage(srcImage, x-x*srcWnewW, y - y * srcH / newH, Graphics.LEFT
- | Graphics.TOP);
-
- }
-
- }
-
- return dst;
- }
这种做法效果上和前者无异,但是并不可取,只要算算它的时间复杂度就知道,基本上是前者的平方。在我的机器上,做一次全屏幕的放缩操作,前者耗时60ms,而后者耗时7150ms。
其实上面的做法很简单,以后有需求可以整理成一个控件,这样就可以很方便的调用,与学习。
分享到:
相关推荐
在Android开发中,手势识别是用户交互的重要组成部分,特别是对于图像查看器应用,手势缩放功能使得用户可以方便地查看图片的细节。本教程将详细讲解如何实现“手势点击图片放缩”的功能。 首先,我们需要了解手势...
在IT领域,图片放缩是一项基础且重要的技术,它广泛应用于各种软件、网站以及移动应用中。本Demo主要展示了如何实现这一功能,让我们一起深入探讨其中的技术细节。 首先,图片放缩涉及到的主要概念是图像处理,它...
在本项目"PuKe.rar"中,我们主要探讨的是如何使用Java编程语言来实现图片的旋转和放缩功能。这是一个基于课程设计的应用,其目的是为了模拟52张纸牌的摆放和翻转过程。虽然描述中提到的具体算法或规则没有详细展开,...
Qt QGraphicsView实现图片放缩、鼠标拖动移动、鼠标点位置放大缩小_图片查看.rar 文件大小: 1718087 字节 修改时间: 2024年9月2日, 14:32:55 MD5: DC77C0D16EAF92D9F53957DE19E4BD2C SHA1: 91BF2FF1F7333C1C9F6B69EC...
visual studio环境下的QT实现图片放缩、鼠标拖动移动和鼠标点击位置放大缩小的项目工程文件
图片放缩、旋转、裁剪 for 微信小程序,实现方式是canvas作图 使用方法 下载代码,在微信开发者工具中选择相应包路径,打开后可直接查看 说明 项目基础来自这位同学https://github.com/dlhandsome/we-cropper ,增加...
### 图片随鼠标滚轮的转动放缩:JavaScript 实现详解 #### 一、功能概述 在现代网页设计中,用户交互体验变得越来越重要。一个常见的需求是让用户能够通过简单的鼠标滚轮操作来放大或缩小页面中的图片。这种方式...
同时,QGraphicsPixmapItem的`setPos()`方法用于设置图片在场景中的位置。 3. 选点功能: 为了实现选点,可以创建一个QGraphicsRectItem或者QGraphicsEllipseItem来表示选区。在`mousePressEvent()`中记录开始位置...
js彩色圈圈,动态炫彩放缩旋转绽放,惊叹效果,前端小白必看! js彩色圈圈,动态炫彩放缩旋转绽放,惊叹效果,前端小白必看! js彩色圈圈,动态炫彩放缩旋转绽放,惊叹效果,前端小白必看! js彩色圈圈,动态炫彩...
在使用Delphi开发触摸屏应用时,特别是在处理图像显示和交互功能时,了解如何实现图片的旋转和放缩是至关重要的。以下将详细介绍这个主题,包括相关知识点和技术要点。 首先,Delphi是一款强大的Windows应用程序...
在C++ Builder(通常简称为BCB)中实现图像的放缩是一项常见的任务,尤其是在图形用户界面(GUI)开发中。C++ Builder 提供了多种库和组件来处理图像操作,其中最常用的是VCL(Visual Component Library)框架。本文...
在介绍如何使用Python实现图片的旋转、放缩和裁剪功能之前,我们首先需要了解Python在图像处理方面的强大库Pillow(PIL Fork)。Pillow是Python Imaging Library的分支版本,它增加了许多新功能和修复了一些存在的...
这可以通过设置适当的动画时间和插值器实现,比如使用`ObjectAnimator`配合`DecelerateInterpolator`,让图片在缩放过程中速度逐渐减慢,更符合自然的视觉感受。 6. **性能优化**: 大图片可能会导致内存消耗过大,...
这个压缩包文件“安卓微信相关相关-android仿微信朋友圈图片浏览其中有图片的异步加双击图片放缩点击图片退出当前界面横向滚动图片查看.rar”提供了实现类似微信朋友圈图片浏览功能的代码示例。以下将详细介绍其中...
为了防止图片在放大后超出屏幕范围,需要实现边界检测。当图片边缘接近屏幕边界时,阻止进一步的移动或缩放。这通常需要计算图片的边界和屏幕边界的关系,然后在处理手势事件时进行相应的限制。 4. **默认壁纸**:...
当我们谈论“ZOOMJS仿Medium的图片放缩效果超漂亮”时,我们指的是一个使用JavaScript实现的库,它允许用户在网页上实现类似Medium的优雅图片缩放功能。这种效果为用户提供了一种更加沉浸式的阅读体验,尤其是在查看...
图像增广--仿射变换实现图像的平移 旋转 翻转 放缩 错切
本项目旨在实现一个仿照Medium的图片放缩功能,以提供类似的良好视觉体验。通过分析“仿 Medium 的图片放缩效果,超漂亮.zip”这个压缩包,我们可以看到它包含一个名为"fat/zoom.js"的文件,这可能是一个独立的、无...
SVG编辑器 Qt加C++实现,可放缩的矢量图形编辑器
在IT行业中,图片压缩和等比例放缩是图像处理领域中的常见操作,广泛应用于网站优化、存储管理和多媒体设计。下面将详细阐述这两个知识点。 一、图片压缩 图片压缩是为了减小图片文件的大小,以便更有效地存储和...