使用触摸屏进行图像处理的编码

时间:2018-03-26 13:46:41

标签: image touchscreen

我想编写一个应用程序:

  • 在触摸屏上显示图像(jpeg,hd,1920 x 1080像素)。
  • 当用户触摸屏幕并移动他/她的手指时,图像将替换来自另一图像的像素的“已触摸”区域的像素。

我听说有人会说“团结”(2D?3D?)就可以做到这一点。 然后我看到有一个能够考虑触摸屏设备的SDL_2包。

- >你们有些人请告诉我这件事吗?哪种开发系统可能最适合我正在寻找的东西?您认为哪种语言最适合?我正在寻找的系统在处理图像时必须非常快,以便产生“流动”行为。

对于这个初学者的问题感到抱歉,但是现在对我来说,为了弄清楚如何实现它将是一项非常艰苦的工作,至少我想从最好的起点开始。

非常感谢,我真的很期待对此有任何建议。

最诚挚的问候,

P.cordo

1 个答案:

答案 0 :(得分:0)

在Unity3D中很容易实现这样的事情。从它的要求看来它将是2D应用程序。

仅仅为了逻辑,它似乎相当容易实现。将图像(PNG / JPG)显示为全屏尺寸,输入触地得分并找出像素坐标。一旦你有坐标设置这些像素的alpha值为0.在这种情况下,您可能希望使用大小因子导致删除单个像素在一般情况下甚至可能不可见。

对于叠加效果,您可以考虑使用Unity UI并为图像维护正确的Z顺序,并进行光线投射以选择图像以移除像素。

作为参考我也附上了一个脚本,请查看:

public class ImageUpdate : MonoBehaviour {

    public Texture2D tex;
    public int size = 25;

    Color32[] texPix;
    int width,height;


    void Start()
    {
        //Initialising image components
        GetComponent<RawImage> ().texture = tex;
        width = tex.width;
        height = tex.height;
        texPix = tex.GetPixels32 ();
        tex = new Texture2D (width, height, TextureFormat.ARGB32,false);
        tex.SetPixels32 (texPix);
    }

    void Update()
    {
        //Update this to touch for mobile devices
        if (Input.GetMouseButton (0)) {
            Vector2 pixelPos = Input.mousePosition;

            //Removing the touched pixels
            for(int i=-size;i<size;i++)
                for(int j=-size;j<size;j++)
                    tex.SetPixel ((int)Mathf.Clamp(i + pixelPos.x,0,width), (int)Mathf.Clamp(j + (int)pixelPos.y,0,height), new Color (0, 0, 0, 0));

            UpdateImage ();
        }
    }

    void UpdateImage()
    {
        //tex = new Texture2D (width, height, TextureFormat.ARGB32,false);
        //tex.SetPixels32 (texPix);
        //Applying the updates
        tex.Apply ();
        GetComponent<RawImage> ().texture = tex;
    }
}

现在您唯一需要记住的是将图像分辨率映射到屏幕分辨率。如果图像与屏幕分辨率不同,那么您可以使用偏移值来调整间隙。