[Unity3D] UGUI 아틀라스에서 Sprite 파일 분리하기

이미 합쳐져 있는 UGUI용 Atlas File 에서 Sprite 를 분리하는 방법

Atlas 의  Texture로 부터
Sprite 영역만큼 Pixel 값을 가져와
새로운 Texture에 입히고 
파일로 저장하면 됩니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class AtlasLoader
{
    public Dictionary<string, Sprite> spriteDic = new Dictionary<string, Sprite>();

    public AtlasLoader()
    {

    }

    public AtlasLoader(string spriteBaseName)
    {
        loadSprite(spriteBaseName);
    }

    //Loads the provided sprites
    public void loadSprite(string spriteBaseName)
    {
        Sprite[] allSprites =  Resources.LoadAll<Sprite>(spriteBaseName);
        if (allSprites == null || allSprites.Length <= 0)
        {
            Debug.LogError("The Provided Base-Atlas Sprite `" + spriteBaseName + "` does not exist!");
            return;
        }

        for (int i = 0; i < allSprites.Length; i++)
        {
            spriteDic.Add(allSprites[i].name, allSprites[i]);
            MakeFile(allSprites[i]);
        }
    }

    void MakeFile(Sprite sprite)
    {
        try
        {
            Debug.Log(string.Format("{0} : {1}", sprite.name, sprite.rect.ToString()));
            Rect rect = sprite.rect; //분리할 스프라이트의 시작 좌표와 사이즈
            Texture2D mainTex = sprite.texture; //스프라이트의 메인 텍스쳐를 가져옴
            //새로 만들어질 텍스쳐, sprite.texture.format 이건 메인 텍스쳐의 포맷을 그대로 사용
            Texture2D tex = new Texture2D((int)rect.width, (int)rect.height, sprite.texture.format, false); 
            //메인 텍스쳐에서 스프라이트의 영역 만큼 픽셀 값을 가져옴
            Color[] c = mainTex.GetPixels((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
            tex.SetPixels(c);// 새 텍스쳐에 픽셀값을 입힘
            tex.Apply(); // 적용
            var bytes = tex.EncodeToPNG(); // PNG byte로 형태로 만듬. JPG는 EncodeToJPG 사용 
            string savePath = string.Format("{0}/{1}.png", Application.persistentDataPath, sprite.name); //저장할 파일 위치
            Object.DestroyImmediate(tex, true); //새텍스쳐는 쓸일이 없으므로 삭제
            System.IO.File.WriteAllBytes(savePath, bytes); //파일로 쓰기
            Debug.Log("MakeFile : " + sprite.name);
        }
        catch (System.Exception ex)
        {

        }

    }
}

#Split_sprite_file_from_UGUI_atlas_file. 

[Android] Glide

안드로이드용 이미지 로딩 라이브러리.

 

https://futurestud.io/blog/glide-getting-startedhttps://github.com/bumptech/glide
http://dktfrmaster.blogspot.kr/2016/09/glide.html
http://itpangpang.xyz/243

 

[Android] Retrofit

HTTP REST API 구현을 위한 라이브러리.

GET, POST, PUT, DELETED 전달  ->  xml, json, text, rss  등으로 응답을 받을 수 있음

 

 

http://thdev.tech/androiddev/2016/11/13/Android-Retrofit-Intro.html

[Android] Gallery Refresh after Kitkat (ver. 4.4)

안드로이드 킷캣 (4.4) 이후 갤러리 갱신 하는 방법이 변경되었다고 합니다.

이전에는 Media Mount 를 이용해서 전체적으로 갱신을 했었는데 배터리 소모가 심한 이슈가 있었다네요

이후에는 아래 코드를 사용하시면 됩니다.

원문 : http://stackoverflow.com/questions/4646913/android-how-to-use-mediascannerconnection-scanfile

import java.io.File;
import android.content.Context;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;

public class SingleMediaScanner implements MediaScannerConnectionClient {

private MediaScannerConnection mMs;
private File mFile;

public SingleMediaScanner(Context context, File f) {
    mFile = f;
    mMs = new MediaScannerConnection(context, this);
    mMs.connect();
}

@Override
public void onMediaScannerConnected() {
    mMs.scanFile(mFile.getAbsolutePath(), null);
}

@Override
public void onScanCompleted(String path, Uri uri) {
    mMs.disconnect();
}

}

간단하게는 이 함수만 써도 될 것 같네요~

private void scanFile(String path) {

        MediaScannerConnection.scanFile(MainActivity.this,
                new String[] { path }, null,
                new MediaScannerConnection.OnScanCompletedListener() {

                    public void onScanCompleted(String path, Uri uri) {
                        Log.i("TAG", "Finished scanning " + path);
                    }
                });
    }

[ETC] Chrome – Remote Desktop (모바일설정)

이제 모바일 기기에서 설정하는 방법을 알아보죠.

아이폰 기준으로 설명하겠습니다.

제가 아이폰을 쓰니까요 -ㅁ- ;; 

  1.  앱스토어에서 
    검색 : chrome  으로 검색합니다. 

    조금 내려보면 Chrome Remote Desktop 이 보입니다.
    설치 ㄱㄱ

 

2. 설치후 앱을 실행합니다.

만약 아이폰에 이미 구글 계정이 추가 되어 있다면
따로 로그인을 하지 않아도 되고
그렇지 않다면 구글 계정으로 로그인 해야합니다.

이때 구글 계정은 PC의 크롬브라우저에 로그인 된 계정과 같은 계정이어야 합니다. (중요!)

정상적으로 로그인하고 실행하면 아래처럼 원격데스크탑에 공유 된 컴퓨터 목록이 나옵니다. 
(전 세개를 했네요. 회사,집,노트북)

그 중에 아이콘이 파란색인 녀석이 공유가 활성화 되어 접속이 가능한 녀석입니다. 

CLICK : 활성화 된 컴퓨터를 선택합니다. 

3. 그럼 호스트에 대한 인증이 필요하다고 나옵니다.

여기에 이전에 설정했던 PIN 번호 (숫자 6자리)를 입력해줍니다.

 

4. PIN 번호를 제대로 입력했다면 
이렇게 컴퓨터의 바탕화면이 나타납니다! 

그리고 공유를 당하는 컴퓨터에는 화면 하단에
“내 컴퓨터를 ~~~~ 님과 공유하고 있습니다.” 라는 메세지가 뜹니다.

화면 우측 상단에 마우스를 선택하시면 커서를 제어할 수 있고 
키보드를 선택하면 키 입력이 가능합니다.

 

안드로이드도 아이폰과 다를 것이 없을겁니다. (안해봤지만…;;)

 

여기까지 입니다 ^^  

www.tedhome.net