设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

请问用blt画图时,以邻近的形式缩放

查看数: 4234 | 评论数: 14 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-27 23:45

正文摘要:

请问用bitmap.blt画图时,如何以邻近的形式缩放? 默认是会模糊化处理的, 我需要以像素形式的放大

回复

celica 发表于 2020-6-5 22:38:44
chyj4747 发表于 2020-6-5 22:29
换了种做法,模糊估计是blt这个函数的内部处理,毕竟是把小尺寸图标画满大尺寸画布
个人推荐图片加载后直 ...

感谢帮助,
我主要是想制作卡片(bitmap),重复的时候直接调用相同的卡就行,
这样会多出几个Sprite,不知道会不会有效率的影响(前代RGSS里sprite的多少影响还满大的)
我还是精简icon自己放大多做几张原图吧。
chyj4747 发表于 2020-6-5 22:29:47
本帖最后由 chyj4747 于 2020-6-5 22:35 编辑
celica 发表于 2020-6-5 19:55
测试的,在我电脑上就是糊的。


换了种做法,模糊估计是blt这个函数的内部处理,毕竟是把小尺寸图标画满大尺寸画布
个人推荐图片加载后直接添加到Sprite中,相当于sprite.bitmap = loadImage(....),然后设置精灵的缩放,如果图片是图集,那么可以调用sprite的setFrame方法来设置显示区域
我自己的项目中一般blt是用来画背景的,所以糊不糊都一样,基本看不出来
另外,下面这种做法更简洁,blt需要等图片异步加载完成之后才能真的去绘制,不然画不出来,也就是需要在update中等待bitmap.isReady
  1. Spriteset_Map.prototype.createLowerLayer = function() {
  2.     Spriteset_Base.prototype.createLowerLayer.call(this);
  3.     this.createParallax();
  4.     this.createTilemap();
  5.     this.createCharacters();
  6.     this.createShadow();
  7.     this.createDestination();
  8.     this.createWeather();

  9.     this.icon = ImageManager.loadBitmap('img/system/', 'IconSet', 0, false);
  10.     this.a = new Sprite(this.icon);
  11.     this.a.scale.set(4, 4);
  12.     this.a.setFrame(64, 64, 32, 32);

  13.     this.addChild(this.a);
  14. };
复制代码

你或许是想把所有图片都画到一个sprite的bitmap上去,但其实没必要,完全可以分开

点评

不是还有个 bltImage 么,可以试试这个  发表于 2020-6-6 06:29
lvashe 发表于 2020-6-5 21:35:57
本帖最后由 lvashe 于 2020-6-5 21:42 编辑

sorry , it's "enabled" not "enable" :(
it was my fault
lvashe 发表于 2020-6-5 19:57:29

this.icon =....
this.icon.smooth = ....(not necessary)
this.icon.context.....(not necessary)
var tempBitmap = new Bitmap(160,160)
tempBitmap._context.imageSmoothingEnable = false;
tempBitmap.blt(XXXXXXXXXXXXXXXXXX)
this.a = new Sprite(tempBitmap);

Try it :)
celica 发表于 2020-6-5 19:55:42
chyj4747 发表于 2020-6-5 19:30
跟电脑肯定没关系

你做个简单的demo然后传上来吧,你自己写代码的话可以只传js上来,当然图片如果不是默 ...

  1. Spriteset_Map.prototype.createLowerLayer = function() {
  2.     Spriteset_Base.prototype.createLowerLayer.call(this);
  3.     this.createParallax();
  4.     this.createTilemap();
  5.     this.createCharacters();
  6.     this.createShadow();
  7.     this.createDestination();
  8.     this.createWeather();

  9.     this.b = false;

  10.     this.icon = Bitmap.load(decodeURIComponent('img/system/IconSet.png'));
  11.     this.icon.smooth = false;
  12.     this.icon._context.imageSmoothingEnable = false;
  13.     this.a = new Sprite();
  14.     this.a.bitmap = new Bitmap(160, 160);
  15.     this.a.bitmap.smooth = false;
  16.     this.a.bitmap._context.imageSmoothingEnable = false;
  17.     this.a.bitmap.blt(this.icon, 64, 64, 32, 32, 0, 0, 160, 160);

  18.     this.addChild(this.a);

  19. };

  20. Spriteset_Map.prototype.update = function() {
  21.     Spriteset_Base.prototype.update.call(this);
  22.     this.updateTileset();
  23.     this.updateParallax();
  24.     this.updateTilemap();
  25.     this.updateShadow();
  26.     this.updateWeather();
  27.    
  28.     if (!this.b && this.icon.isReady()) {
  29.         this.a.bitmap.blt(this.icon, 64, 64, 32, 32, 0, 0, 160, 160);
  30.         this.b = true;
  31.     }
  32. };
复制代码


测试的,在我电脑上就是糊的。
chyj4747 发表于 2020-6-5 19:30:22

跟电脑肯定没关系

你做个简单的demo然后传上来吧,你自己写代码的话可以只传js上来,当然图片如果不是默认的也记得一起打包传上来
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-12 21:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表