제임스딘딘의
Tech & Life

개발자의 기록 노트 153

[안드로이드] 동적으로 다음페이지를 로딩하는 ListView 구현

동적으로 다음페이지를 로딩하는 ListView 구현 아이폰의 수많은 UITableView를 활용하는 어플리케이션을 보면 참 퀄리티 높게 잘 만든다는 생각이 드는 것 중에 한가지가 바로, 자동으로 리스트의 가장 아래에 도달하면, 알아서 다음페이지를 로딩하는 기능이 아닐까 싶다. 안드로이드에서도 요즘은 많은 어플리케이션이 해당 기능을 구현하고 있다. 안드로이드에서는 리스트뷰와 데이터간에 Adapter라는 디자인패턴을 활용하고 있어 아이폰의 그것과는 같은 기능이라도 구현하는 방식이 다르다. 안드로이드에서는 좀 더 적극적으로 Adapter를 활용하여 이 기능을 구현해야 한다. 어찌보면 조잡하고 어찌보면 더 쉽게 구현할 수 있다. 길게 이야기할것 없이 예제 코드를 살펴 보겠다. public class Dynami..

[C#] .NET 이 아닌 native 코드로 작성된 외부 DLL 사용 방법(파라미터의 타입을 알 수 없는 경우)

외부 메소드의 파라미터가 char* 인 경우(데브피아 C# 마을, 질문&답변) (원본: http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNO=8&no=120108&ref=120099&page=3#Contents120108) 가장 일반적으로 포인터로 넘겨서 값을 받아올경우 할당되어 있는 방으로 넘겨 받아야 합니다. 하지만 DllImportAttribute 클래스를 이용하여 맵핑 하시기에 어려움을 겪으시는것 같네요. 해당 매개변수는 호출지점에 구도에 따라 string, StringBuilder, byte, unsafe.... 맵핑이 가능합니다. 원초적인 방법으로 IntPtr 을 이용한 메모리 활당하여 이용하는 방법도 가능합니다. 사용하시는 ..

[안드로이드] 안드로이드의 Process & Threads

안드로이드의 Process & Threads 안드로이드의 프로세스(Process)와 스레드(Threads)에 대해서 공부해 보았다.학교에서 배운 운영체제, 시스템 프로그래밍 등의 과목에서 배운 개념과 크게 다른 점은 없지만, 안드로이드의 프로세스와 스레드에는 분명 안드로이드 고유의 특성이 추가적으로 포함되어 있다.다음 링크의 자료를 참조 하였다. http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#ThreadSafe 시작하며 안드로이드 어플리케이션 컴포넌트(components)가 실행하려 할 때, 이미 시작된(running) 다른 컴포넌트가 없다면, 시스템은 단일한 하나의 스레드에서 실행되도록 하는 어플리케이션..

[Java] 비트 연산자 / 시프트 연산자

[Java] 비트 연산자 / 시프트 연산자 자바언어에는 C/C++ 와 동일하게 비트연산자들인 '&', '|', '^', '~' 와 시프트연산자인 '' 가 있습니다.그러나 자바에만 있는 연산자가 있는데요.바로 '>>>' 라는 연산자가 추가적으로 존재합니다. 순서대로 정리해 보도록 하겠습니다. 비트연산자컴퓨터 내부의 데이터를 비트 단위로 비교하거나 조작할 때 사용한다. 1. 논리곱 (and) &각 비트를 비교하여 양쪽 모두 1이면 1, 아니면 0을 반환함. ex) a = 110, b= 220a = 0 1 1 0 1 1 1 0b = 1 1 0 1 1 1 0 0 a&b = 0 1 0 0 1 1 0 0 2. 논리합 (or) |각 비트를 비교하여 어느 한쪽이 1 이면 1, 그렇지 않으면 0을 반환함. ex) a =..

[Java/Tip] 자바에서 unsigned byte 다루기.

자바의 Primitive Data Type 들 중에는 unsigned 데이터 타입이 존재하지 않습니다. unsigned를 특별히 사용할 일이 없을때는 의식하지 못하고 있었는데, 자바에서(정확히는 안드로이드에서 사용할 목적으로) 음성을 G.711 인코딩/디코딩 하기 위한 코덱을 구현 하던 중 깨닫게 되었습니다. byte 타입을 unsigned 로 0~255 을 사용하고 싶었지만, 자바에서는 unsigned 키워드 자체가 존재하지 않아 byte 타입은 -128~127 의 값을 갖게 되어 있더군요. 즉 2's complement 의 값입니다. 하지만 제가 필요한 것은 0~255 의 범위값이었습니다. 정확히는, C#에서 byte 타입으로 보낸 0~255의 값 (이진 값으로는 0000 0000 ~ 1111 111..

동기화 소켓 vs 비동기화 소켓, 사용시 각각의 장단점

// 동기화와 비동기화 소켓 사용시 유의 사항에 가까울지도 동기화 소켓의 경우는 한쪽이 write이면 다른 한쪽은 read로서 다른 일하지말고 read대에만 신경 집중해야 합니다. 그래서 write하는 곳에서 자료를 다 보낼때까지 read하는 쪽은 다 받을때까지 Block(다음 구문으로 넘어가지 않음) 되어 있어야하죠. 클라이언트 측에서는 다 받을때까지 기다리고 난후 다음 일을 하면되겠지만, 서버측에서는 read에만 집중할 수 없고 다른 일을 해야합니다. 즉 다른 요청에 대해서 Listen도 해야하고, 기타 다른 처리도 해야겠지요. 이런 이유로 서버측에서는 Forking(자기 자신을 복제함)을 하든가 Threading을 하던가해서 현재의 일을 하나의 Thread(Forking의 경우는 Process)에게..

개발자들이 Windows 8 에 대해 알아야 할 10가지 정보

이번 Windows 8 은 모든 것을 새롭게 다시 상상했다고 할 만큼 많은 것이 바뀌었지요. 관심을 가지고 지켜보더라도 중요한 정보들을 놓치기가 쉬울 것 같아요. 그래서 개발자들이 꼭 알아야 할 10가지 정보를 정리해 봤습니다. 1. 마이크로소프트는 작년 9월 //Build 개발자컨퍼런스에서 Windows 8 Developer Preview를 공개하였다. 누구나 Windows 개발자 센터 사이트(http://dev.windows.com)에서 지금 바로 다운로드하여 설치할 수 있다. 개발툴이 포함되어 있어서 앱 개발을 시작해볼 수도 있다. 오는 2월 말에 베타 버전이 출시될 예정이다. 2. Windows 8 에서는 Windows 7 응용프로그램들을 실행 할 수 있으며, 평상시에도 더 적은 메모리와 프로세스..

[우분투] Ubuntu에 Mysql 설치

Ubuntu에 Mysql 설치 1. 우분투에서는 다음과 같이 입력하면 mysql 에 관련된 패키지를 검색하게 됩니다. $sudo apt-cache search mysql 그중에서 필요한걸 골라서 설치하면 됩니다. (mysql 서버 데몬을 설치하는 경우 바로 2번 부터) 2. mysql 서버 설치 $sudo apt-get install mysql-server 3. mysql 클라이언트 설치 $sudo apt-get install mysql-client 4. mysql 서버 설치 직후 UTF-8 설정을 해줍니다. 해주지 않을 경우 latin1 로 character encoding 이 자동 설정되는데, 이걸 그대로 두면, 한글 처리할때 난관이 찾아올것입니다. my.cnf 파일을 편집하기 위해 vi에디터로 해당..

[영상처리] Mean-Shift 와 CAMshift 알고리즘

Mean-Shift 와 CAMShift 알고리즘 많은 사람들이 이들 두 알고리즘이 색상 특징값을 기반으로 한다고 알고 있지만, 사실 이것들은 관심영역의 모든 특징값의 분포를 이용할 수 있는 알고리즘이다. (1) Mean-Shift 알고리즘Mean-Shift 알고리즘은 데이터 집합의 밀도분포(특징점,코너,색상)를 기반으로 관심영역(ROI: Region Of Interest) 객체를 고속으로 추적하는 알고리즘이다. 초기의 검색 영역의 크기와 위치를 지정하면 반복되는 색 분할 계산에 의해서 색상 클러스터가 발생되고 초기 지정한 색 영역에 기반하여 경계를 결정하여 관심 물체를 추출할 수 있다고 한다. 이것은 mode seeking 알고리즘이라고도 하며, 특정 데이터들의 중심(mean)으로 이동(shift)하는 ..

[Java] 정규표현식 표현 방법

java.util.regex 패키지에 있는 Match 클래스와 Pattern 클래스를 사용하여 문자열을 정규표현식으로 검증할 수 있다. boolean bln = Pattern.matches("^[a-zA-Z0-9]*$", this.input); 정규표현식은 다음과 같은 문법으로 되어 있다. ^ : 문자열의 시작을 나타냄. $ : 문자열의 종료를 나타냄. \ . : 임의의 한 문자를 나타냄. (문자의 종류는 가리지 않는다) | : or를 나타냄. ? : 앞 문자가 없거나 하나있음을 나타냄. + : 앞 문자가 하나 이상임을 나타냄. * : 앞 문자가 없을 수도 무한정 많을 수도 있음을 나타냄. 만약, .* 으로 정규식이 시작한다면 시작하는 문자열과 같은 문자열이 뒤에 없거나 많을 수도 있는 경우에만 일치를 ..

Register Allocation

Register Allocation은 virtual register를 physical register에 대응시키는 과정입니다. 이 과정에는 두가지 과정이 필요한데, 첫째는 interference graph, 둘째는 register coloring입니다. 어떤 두 register가 동시에 live하면 같은 physical register를 할당할 수 없습니다. 그리고 이런 상태를 두 register가 interfere한다고 표현하죠. 이렇게 register를 graph의 vertex로, interfere하는 두 register를 edge로 연결하여 표현하는 graph를 interference graph라고 합니다. 이것은 liveness analysis를 통해서 구해낼 수 있습니다. register col..

Function Calling Conventions

함수 호출 규약(Function Calling Convention)에 대하여 정리해 보자. 일단 Microsoft의 Calling Convention의 종류는 다음과 같다 Calling Convention Argument Passing Stack Maintenance Name Decoration (C only) Notes __cdecl Right to left. Calling function pops arguments from the stack. Underscore prefixed to function names. Ex: _Foo. This is the default calling convention for C/C++ __stdcall Right to left. Called function pops it..

[안드로이드] 안드로이드 API GPS 상태체크

안드로이드 API GPS 상태체크 지도를 비롯하여, 안드로이드 기기의 위치정보를 이용한 서비스 개발을 할 때, 일반적으로 기기의 현재 위도(latitude), 경도(longitude) 값이 필요하다. 기기의 현재 위,경도 값을 알기 위해서는, 사용자가 위치정보 사용을 동의해야 한다.만약 동의하지 않은 상태에서 위치 획득 관련 API호출한다면, exception을 던지게 되어있다. 만약 아래와 같은 UX flow를 구현하려 한다면, 아래 코드를 참고하자. GPS 사용동의 여부를 체크 후 if 미동의 : 'GPS 사용 동의 설정 화면으로 이동 하겠는가?' 다이얼로그 출력. if 다이얼로그로 부터 '이동한다' 입력받을 경우 : GPS 설정 화면으로 이동. 아래는 그 기능의 예제코드이다. @Override pu..

리눅스 압축 tar gzip bzip2 zip 해제/압축 방법

리눅스 압축 명령/방법/종류 리눅스에서 많이 사용되는 압축파일로는 tar, gz, bz2, zip 등이 있다. 이들 각각은 나름대로의 고유한 압축방식을 가지고 있으며, 압축해제하는 방법 또한 다양하다. 그래픽 유저 인터페이스(GUI) 모드에서 리눅스를 사용하는 사람이라면 간단히 더블클릭으로 압축 관리 프로그램을 실행하여 압축 및 해제를 할 수 있지만, 텍스트 모드를 사용하는 상황이라면 이들 압축파일을 사용할 수 있는 명령들을 숙지하고 있을 필요가 있다. 오늘은 이러한 압축 파일들을 생성하고 압축해제하는 방법에 대해 알아보도록 하자. .tar 파일tar은 엄밀히 말해서 압축방식은 아니고, 일종의 묶음 파일로 이해하자. 이 tar과 gzip을 같이 사용하는 경우 tar.gz (또는 tgz)라는 확장자를 사용..

[우분투] 우분투 JDK 7 tar 패키지로 수동 설치하기

우분투에 JDK 7 tar 패키지로 수동 설치하기 # JDK 설치하기 우분투에 JDK 설치 관련으로 인터넷을 뒤져보면 apt-get (sun-java...) 이나 시냅틱 패키지 관리자 ( openjdk-... )로 설치가 된다고들 하던데... 난 안되는 상황이다. "설치할 수 있는 후보가 없습니다." 라는 메세지만 받았다. 그리고 rpm, deb등 설치 패키지들도 의존성관련 에러가 발생한다. 이럴때 살짝 멘붕이 온다. 하지만 당황하지 말자.설치 패키지로 잘 설치가 안된다면 다른 방법이 있다. 바로, tar 패키지 받아서 직접 경로에 설치하는 것이다. 아래 주소에 가면 x86용 JDK-7 tar 패키지를 받을 수 있을 것이다. http://www.oracle.com/technetwork/java/javas..

Java Decomplier JAD 와 JadClipse 설치 및 활용

Java Decomplier JAD 와 JadClipse 설치 및 활용 Jad는 바이트코드인 Java class파일을 디컴파일해주는 프로그램이다. JadClipse는 자바디컴파일을 이클립스에서 편리하게 사용할 수 있도록 해주는 이클립스 플러그인이다. 아래 순서대로 따라하면 쉽게 활용해볼 수 있다. 1. Jad및 JadClipse 다운로드 * Jad : http://www.kpdus.com/jad.html 윈도우 사용자는 Jad 1.5.8g for Windows 9x/NT/2000 on Intel platform 를 다운로드 * JadClipse : http://sourceforge.net/projects/jadclipse 자신의 이클립스 버전에 맞는 jadclipse3.x 를 다운로드 2. Jad와 Ja..

[C] 저수준 파일 입출력

저수준 화일 입출력 함수들 저수준의 화일 입출력에서는 FILE이란 구조 대신 간단하게 각 화일마다 번호를 사용하는데, 이를 화일 식별자(file descriptor), 또는 핸들(handle)이라고 한다. 이 핸들은 0 이상의 값을 가지고 있는데 실제로 0과 1, 2 는 고정된 의미(핸들 0은 표준 입력을 위한 번호이며 1은 표준 출력, 그리고 2는 표준 에러로 사용)를 갖고 있어서 화일을 처음 열게 되면 그 화일의 핸들은 3이 된다. 윈도우즈 상에서는 저수준 입출력 함수에 모두 '_'를 붙인다. 예) _open, _write, _O_RDONLY, _close ... open 함수 저수준의 화일 입출력에서도 화일을 사용하기 위해서는 화일을 먼저 열어야 하며, 이때 다음과 같이 open 함수를 사용한다. ..

FBX improvements in XNA Game Studio 3.0

max에서 FBX파일을 export한뒤 xna에서 import하여 다룰때 필요한 심화된 정보 정도로 보면 되겠다. One of the less obvious changes in our 3.0 release is that we picked up an updated version of the FBX SDK from our partners at Autodesk, which enables some cool new functionality in our FBX importer: Multiple textures Multiple texture coordinate channels Effect materials Material name strings are now imported correctly To use this s..

XNA와 3D 기초 (1)

[1] XNA에서 3D 프로그래밍의 시작. 3D 자료를 2차원인 모니터 화면에 렌더링 한다는 것의 의미는 무엇인가?? 3D 렌더링이라는 것은 기본적으로 3차원 공간의 기하구조를 2차원 평면에 투영하고, 투영된 기하구조에 적절한 색들을 채워 넣는 것이다. 초창기 3D게임들은 3D 렌더링을 위한 레이캐스팅(ray-casting)과 같은 기법들을 전적으로 CPU에서 처리! 하지만, 오늘날의 3D 그래픽 처리는 모두 GPU에서 일어난다. GPU는 다각형들을 화면에 그리고 픽셀들을 채우는 일뿐만 아니라 3D자료를 2D로 투영하고 변환하는 작업도 모두 처리한다. 게다가 투영, 변환과 픽셀 채우기 작업의 구체적인 방식을 개발자가 세세하게 지정하는것도 가능 ☞ 셰이더(Shader) 기술을 통해서 가능함 3D 점들을 화..

구조체 패딩 비트에 대해서. struct padding bit

아래와 같은 구조체를 선언했다고 하자. char가 1바이트이고 int가 4바이트인 시스템에서 위의 구조체를 선언하고 sizeof()로 구조체의 사이즈를 찍어보면 얼마가 나올까? 생각대로라면 5바이트가 나와야 한다. 1 + 4 = 5 이니까.. 그런데 대부분의 컴파일러에서 실제로는 8바이트가 나온다. 이유는 패딩 비트가 추가되어서 그렇다. 몇몇 컴파일러는 구조체의 필드를 메모리에 위치 시킬 때 중간에 빈 공간 없이 쭉 이어서 할당하는 경우도 있지만, 대부분의 컴파일러는 성능향상을 위해 CPU가 접근하기 쉬운 위치에 필드를 배치한다. 그러다 보니 중간에 빈 공간이 들어가게 되는 것이다. 이 빈 공간이 바로 패딩 비트이다. 이에 대해서 좀 더 자세히 알아보자. 32비트 CPU는 메모리에서 값을 읽어 올 때 한..

[안드로이드] 자이로스코프 이야기. 가속도센서 vs 자이로센서 비교

자이로스코프 이야기. 가속도센서 vs 자이로센서 비교 오늘은 자이로스코프(Gyroscope)에 대해서 얘기를 해볼까 한다. 자이로스코프는 보통 '자이로센서' 라고 부르는데, 이 센서의 유무에 따라 스마트폰 가격이 크게 달라지는 것 같다. 아이폰은 자이로센서가 기본 탑재인 반면 안드로이드폰은 의무사항이 아니다. 하드웨어 제조사에서는 단가를 낮춘 저가형 라인업도 가지고 있는 경우가 종종 있는데, 이런 안드로이드 스마트폰들은 자이로센서를 제외하고 출시하기도 한다. 아무튼, 이 자이로센서가 무엇이고 어떤 원리로 동작하는지를 알아보자. 그리고, 이 자이로센서가 가속도센서와는 어떻게 다른지, 그 둘간의 차이점에 대해서 그 후에 알아보겠다. 자이로스코프(Gyroscope)운동하는 모든 물체는 각도를 갖고 있다. 예를..

[안드로이드] 이미 생성해둔(Sqlite) DB를 앱에서 Load하여 사용하기

이미 생성해둔(Sqlite) DB파일을 앱에서 읽어들여 사용하기 약간 복잡한 기초 데이터를 위해 초기 실행시 Create Table 도 하고 insert도 할 수 있겠지만, 별도의 db 파일을 PC등에서 미리 만들고, 관리하며, 앱에서는 이 파일을 읽어들이기만 하여 (Load) 사용하고 싶다면 아래와 같은 방법을 쓰는 것도 한가지 해결책이 될 수 있다.db 파일을 assets에 넣는다.아래 함수를 적당한 위치에 넣는다. public static void initialize(Context ctx) { // check File folder = new File(ROOT_DIR + "databases"); folder.mkdirs(); File outfile = new File(ROOT_DIR + "databa..

[안드로이드] 안드로이드에서 SQLite를 다뤄보자 (2)

2011/08/09 - [Software Dev Note/Android] - [안드로이드] 안드로이드에서 SQLite를 다뤄보자 (1)2011/08/11 - [Software Dev Note/Android] - [안드로이드] 이미 생성해둔(Sqlite) DB를 앱에서 Load하여 사용하기 안드로이드에서 SQLite를 다뤄보자 (2)안드로이드 앱 개발을 할 때, 없어서는 안될 존재. SQLite의 사용법에 대해 알아보겠다. 오늘은 아주 데이터베이스를 뿌리뽑아보도록 하자.안드로이드는 모바일 환경에 알맞은 SQLite 데이터베이스를 채택하고 있다. 기본적으로 다른 데이터베이스와의 큰 차이는 없다. 물론, 완전히 같지는 않다.다른 점 이라면, 일반적은 데이터베이스는 테이블 생성 시 각 속성에 대한 타입을 지정한..

[안드로이드] 안드로이드에서 SQLite를 다뤄보자 (1)

안드로이드에서 SQLite를 다뤄보자 (1) 안드로이드 플랫폼은 Database를 위해서 플랫폼 자체적으로 SQLite를 기본 탑재하고 있다.우선 SQLite의 특징을 살펴보자. SQLite는 다른 프로그램에 임베딩하기 좋으면서도 깔끔한 SQL 인터페이스를 제공한다.메모리도 적게 사용하면서 속도도 빠르다.실행파일과 소스 코드가 무료이고 공개되어 있기 때문에 많이 사용된다.위와 같은 이유로, 안드로이드는 SQLite를 기본탑재하여 내장하고 있으며, 그결과 모든 안드로이드 애플리케이션은 간단하게 SQLite 데이터베이스를 생성해 활용할수 있게 됐다.SQLite는 표준 SQL 인터페이스를 사용한다. -> SQLite는 SQL 문법에 맞는 명령을 통해 데이터를 가져오거나(SELECT) 데이터를 변경하고(INSE..

[안드로이드]Error generating final archive: Debug certificate expired on

Error generating final archive: Debug certificate expired on 종종 Android SDK를 사용하다 보면, 소스코드에는 전혀 Error가 없는데, Build하려고 하면 아래와 같은 Error로 인해 device나 emulator에서 실행시킬 수 없는 경우가 있다. 문제 상황"Error generating final archive: Debug certificate expired on" 라는 에러 메세지가 Console에 보임. 해결책해결방법은 간단하다. 우선, debug.keystore 라는 파일을 삭제하면 된다.보통 "사용자" 디렉토리에 '.android' 라는 폴더 아래에 있다.나의 경우는 아래와 같다. C:\Documents and Settings\Use..

10진수를 2진수로 변환하는 알고리즘 (또다른 방법)

10진수를 2진수로 변환하는 알고리즘 (또다른 방법) 우선 몇자리의 2진수를 만들것인지를 알아내거나 제시한다.그리고, 기본적인 아래의 규칙 하나만 기억한다.rule : 작으면 0 / 크거나 같으면 1 예를 들어보겠다. 10진수 600을 10자리의 2진수로 만들 경우를 생각해보자.10자리의 2진수로 만들 것이므로, 2의 10승 = 1024 부터 시작한다.그 후, 2의 9승, 2의 8승... 2의 1승까지 차례로 rule대로 비교해 내려간다.아래의 과정으로 간단하게 만들 수 있다. 600 이 1024보다 작으므로 0600이 512보다 크거나 같으므로 1, 그리고 600 - 512 = 8888이 256보다 작으므로 088이 128보다 작으므로 088이 64보다 크거나 같으므로 1, 그리고 88-64 = 242..

XNA Framework의 논리적 흐름

XNA는 Frameworkd 이기 때문에 일련의 논리적 순환 순서가 있다. 공부를 시작하면 우선 이를 인지해야 한다. 1. 메인 응용 프로그램이 게임 생성자를 호출한다. 2. 게임 생성자는 게임 컴포넌트들을 생성하고 게임 컴포넌트의 생성자를 호출한다. 3. XNA Framework에서 게임의 Initialize 메서드를 호출한다. 4. XNA Framework에서 각각의 게임 컴포넌트에 해당하는 Initialize 메서드를 호출한다. 5. XNA Framework에서 각각의 Drawable 게임 컴포넌트에 해당하는 LoadContent 메서드를 호출한다. 6. XNA Framework에서 게임의 LoadContent 메서드를 호출한다. 7. XNA Framework에서 게임의 Update 메서드를 호출한..

[C#] 메소드 동기화

동기화를 원하는 몇개의 메소드가 클래스 안에 있다고 가정하자. (물론 그것들은 여러개의 스레드에 의해 동시에 사용될 수 없게 하려는 상황이라고 가정한다.) 자바 프로그래머라면 스레드 사용시 메소드 동기화를 위해 단지 다음과 같은 방법을사용 하면 된다는걸 알고 있을것이다. public synchronized void methodName() {...} C#에서는 이와같은 효과를 주기 위해 어떻게 해야 할까. 자바를 먼저 공부했던 나는 C#을 공부하면서 이와같은 의문을 가졌고, 찾은 해결방법은 다음과같다. 방법1. Just wrap the entire content of your method in a lock statement. (메소드의 전체내용을 lock 문장으로 둘러 싸면 된다) public class ..

[C#] 구조체

구조체는 클래스와 동일한 구문으로 대부분 형식을 공유하지만 클래스보다 제한적이며 다음과 같은 특징을 갖는다. ▷ 구조체는 값 형식이고 클래스는 참조 형식이다. ▷ 클래스와 달리 구조체는 new 연산자를 사용하지 않고 인스턴스화 할 수 있다. ▷ 구조체는 생성자를 선언할 수 있으나 반드시 매개 변수를 사용해야 한다. ▷ 구조체는 다른 구조체 또는 클래스에서 상속될 수 없으며, 클래스의 기본 클래스가 될 수 없으며 모든 구조체는 System.Object 를 상속하는 System.ValueType에서 직접 상속한다. ▷ 구조체는 인터페스이를 구현할 수 있다. ▷ 구조체를 nullable 형식으로 사용할 수 있고 여기에 null값을 할당할 수 있다. ▷ 구조체 선언 내에서 필드는 const 또는 static으로..

[안드로이드] 안드로이드 SurfaceView 캡쳐 예제

안드로이드 SurfaceView 캡쳐 예제 다음과 같은 상황이라고 가정하자. 아이템의 사진을 찍는 앱이 있는데, 이 아이템들은 ActivityScreen의 특정한 고정 된 영역에서 볼 수 있어야 한다는 요구사항 있다.문제는 저장된 비트맵이 액티비티에 표시될 때 인데, 카메라로 보고 찍은 것과는 보여지는게 다르다. 줌을 땡겨서 사진을 찍을 때, 프리뷰 화면에서는 보여지지 않았던 영역까지 액티비티에 그려진다. 해결을 위한 주요 코드 줄은 다음과 같다. 이미지 캡쳐 (IMAGE CAPTURE) surfHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); captImageView = (ImageView)findViewById(R.id.CamImageView); b..

1 2 3 4 5 6