码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D 画笔实现系列05-Texture2D深入

时间:2017-12-03 19:52:36      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:unity3d   图片   back   alt   画线   +=   style   hid   none   

继续百度,发现c#处理图片的三种方法,像素(最慢)、内存、指针(最快),傻乎乎的一上来就直奔指针,弄得晕头转向(功力不够),最后无奈暂时放弃。转向内存法。

Texture2D中的 LoadRawTextureData(byte[] data)可以中内存在加载图片。

先来看看内存法笔像素的效率高很多

下面是将一张图片变成黑色,

技术分享图片
 1  private void PixelFun(Texture2D Text2D)
 2     {
 3         int width = Text2D.width;
 4         int height = Text2D.height;
 5         print(width);
 6         print(height);
 7         for (int i = 0; i < width; i++)
 8         {
 9             for (int j = 0; j < height; j++)
10             {
11                Text2D.SetPixel(i, j, new Color(0, 0, 0, 1));
12             }
13         }
14         Text2D.Apply();
15     }
像素法
技术分享图片
 1  private void MemoryCopy(Texture2D Text2D)
 2     {
 3         int width = Text2D.width;
 4         int height = Text2D.height;
 5         byte[] arrDst = Text2D.GetRawTextureData();
 6         for (int i = 0; i < arrDst.Length; i += 4)
 7         {
 8 
 9 
10             arrDst[i] = arrDst[i + 1] = arrDst[i + 2] = 0;
11             arrDst[i + 3] = 1;
12         }
13         Text2D.LoadRawTextureData(arrDst);
14         Text2D.Apply();
15 
16 
17     }
内存拷贝法

既然决定用内存法,就面临的如何将鼠标点击的位置转到byte[]数组中的特定位置的问题。

我选择的解决方法是图片设置成TextureFormat.RGBA32格式。byte数组长度为图片宽*高*4;对应方式为(Width * y  + x ) * 4

技术分享图片
 1 public static void DrawPixel(int x, int y, int drawBackgroudWidth, int drawBackgroudHeight, byte[] pixels, Color color)
 2         {
 3             lock (locker)
 4             {
 5                 int pixel = 0;
 6                 pixel = (drawBackgroudWidth * y + x) * 4;
 7                 DrawPoint(pixels, color, pixel);
 8             }
 9 
10         }
11 public static void DrawPoint(byte[] pixels, Color color, int pixel)
12         {
13 
14             pixels[pixel + 3] = (byte)(color.a * 255);
15             pixels[pixel + 0] = (byte)(color.r * 255);
16             pixels[pixel + 1] = (byte)(color.g * 255);
17             pixels[pixel + 2] = (byte)(color.b * 255);
18         }
画一个像素的方法

缺点,画线太粗还会卡。

暂时解决不了了。。。。。。。。。。。。。

Unity3D 画笔实现系列05-Texture2D深入

标签:unity3d   图片   back   alt   画线   +=   style   hid   none   

原文地址:http://www.cnblogs.com/PandaHome/p/7966857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!