728x90

정리가 필요한 카테고리(추후 정리) 58

안드로이드] 안드로이드에서 HttpURLConnection을 이용해 POST 방식으로 데이터 전송하기

HttpURLConnection 클래스를 이용하면 URL 요청하고 POST 방식으로 데이터를 전송하여 응답을 받을 수 있다. 기본적으로 Http 통신에서 지원하는 GET, POST 방식 등을 제공한다. try { URL url = new URL(uri); String result = ""; HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Accept-Charset","UTF-8"); conn.setUseCaches(false); conn.setReques..

C#.NET] WMPLib.WindowsMediaPlayer를 이용해서 wav가 아닌 오디오 파일 재생하는 방법

.NET 개발을 하다보면 wav 파일이 아닌 mp3 같은 파일들을 재생해야 할 때가 있다. wav 같은 경우는 System.Media.SoundPlayer를 이용해서 별도의 라이브러리 추가 없이 재생이 가능하지만, 다른 파일들은 별도의 실행 방식을 사용해야 한다. SoundPlayer - wav 파일 일단 기존의 SoundPlayer를 이용해서 wav 파일을 재생하는 방법을 한 번 보자. private SoundPlayer player; player = new SoundPlayer(filePath); // Sync player.Load(); player.PlaySync(); // ASync plyaer.LoadAsync(); player.Play(); // Stop player.Stop(); SoundP..

C#] Dispose 호출해야 하는 경우와 그렇지 않아야 하는 경우

Dispose를 호출해야 하는 경우 '의심 스럽다면 처분 하는 원칙'에 따름. Windows Forms의 컨트롤들, 파일 및 네트워크 스트림, 네트워크 소켓, GDI+의 펜/브러시/비트맵 등이 이에 해당. Dispose를 호출하지 말아야 하는 경우 현재 코드가 객체를 소유한 것이 아니고, 정적 필드나 속성을 통해 공유 객체를 얻은 경우 System.Drawing namespace의 형식에서 정적 필드 및 속성을 통해 얻은 GDI+ 객체 - 응용 프로그램 종료 시점까지 사용 Dispose 메서드가 현재 상황에 맞지 않는 경우 System.IO namespace와 System.Data namespace의 형식들 MemoryStream - 차후 스트림을 다시 쓰는 경우 StreamReader, StreamWr..

C#] 델리게이트(Delegate)의 호환성

타입 호환성 모든 델리게이트 타입은 다른 모든 델리게이트 타입과 호환되지 않음.메서드 대상이 동일한 델리게이트 인스턴스는 상등으로 간주.멀티캐스트 델리게이트는 같은 대상 메서드들이 같은 순서로 등록된 경우에 상등으로 간주. 매개변수 호환성 어떤 메서드를 호출 시, 그 메서드의 매개변수가 요구하는 것보다 구체적인 형식의 인수를 지정할 수 있음.델리게이트의 매개변수 형식이 대상 메서드의 매개변수 형식보다 구체적일 수 있으며, 이를 반변성(Contravariance)라고 함. 이러한 특성은 기본적으로 다형성을 가진 메서드의 정상적인 작동 방식임. 반환 형식의 호환성 어떤 메서드를 호출 시, 호출자가 요구한 것보다 구체적인 형식 값을 메서드가 반환 가능.델리게이트는 대상 메서드의 반환 형식보다 더 구체적으로 반..

WPF, 윈폼] 마우스 커서 위치에 있는 픽셀의 색상값(RGB) 구하는 방법

필요에 의해서 특정 지점에서의 RGB값으로 구성된 색상값을 구하고 싶어서 간단한 유틸리티를 만드는데, 특정 지점에서의 색상값을 구하는 방법을 찾아봤다. MSDN이랑 스택오버플로우를 뒤져보니까 GetPixel이라는 해당 픽셀에서의 색상값을 구하는 윈도우 API가 있다. [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetWindowDC(IntPtr window); [DllImport("gdi32.dll", SetLastError = true)] publ..

윈폼(Winform)에서 폼보더스타일(FormBorderStyle)이 None일 때, 폼 드래그 구현

윈폼에서 폼보더스타일이 None이면 상단에 있는 제목 표시줄이 사라지면서, 폼을 마우스로 드래그해서 옮길 수 없다. 그렇다고 다른 옵션을 선택하기에는 원하는 디자인을 만들 수 없기 때문에 None 옵션을 유지하면서 마우스 드래그 기능을 추가해야 하는데, 간단하게 해결할 수 있다. MouseDown과 MouseMove 이벤트를 이용해서 드래그 기능을 구현할 수 있다. private void MainForm_MouseDown(object sender, MouseEventArgs e) { mousePoint = new Point(e.X, e.Y); } private void MainForm_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseB..

안드로이드의 이미지버튼(ImageButton)과 이미지뷰(ImageView)의 차이

기본 스타일이 다르다는 것 외에는 둘의 차이는 크게 없다. 성능 차이가 있는지도 의문이고, 기본적인 스타일만 차이나는 것으로 보인다. ImageButton은 non-null 백그라운드가 기본값으로 설정되어 있다.ImageButton.onSetAlpha()는 항상 false를 반환하고, scaleType은 center로 설정되어 있고, 포커싱 방식으로 팽창된다. 사실 이미지 버튼을 만들 때, ImageButton를 사용하는 사람도 있고 ImageView를 사용하는 사람도 있다. 둘 차이에 크게 다른 점이 없다면, 개발자가 어떻게 사용할 것인가 원칙을 정하고 사용하는 것이 좋은데, 스택오버플로우의 개발자들 의견은 이렇다. Button텍스트로 구성되어 있으며 3D 렌더링을 바탕으로 하는 경우 ImageButt..

코틀린(Kotlin)으로 작성한 안드로이드 블루투스 리모컨 예제

https://twinparadox.tistory.com/132 위 링크에 올린 블루투스 리모컨으로 조종하는 아두이노 선풍기에 어플리케이션 코드가 없었다. 프로젝트를 정리해 올리면서 아두이노 스케치 코드는 올렸는데, 어플리케이션 코드는 찾지 못해서 올리지 못한 상태였는데 최근 코틀린을 배우면서, 코틀린도 연습할 겸, 잃어버린 프로젝트의 주권(?)을 되찾을 겸, 리모컨을 다시 만들었다. 소스에 대해 간략히 설명하자면, SelectDeviceActivity는, 블루투스 장치를 검색 및 선택하는 액티비티고, ControlActivity는 해당 장치를 컨트롤하는 액티비티로, 여기서는 리모컨 역할을 하는 액티비티다. 깃허브 주소 : https://github.com/Twinparadox/ArduinoFan-wit..

코틀린(Kotlin) 조건문(When, if)

코틀린에서의 기본적으로 사용할 수 있는 조건문은 크게 두 가지, if와 when이다. if-elseif-else 구문은 기존의 언어들의 형태와 동일한 방식으로 사용할 수 있다. if(조건문) {내용...}else {내용...} whenwhen이라는 표현이 조금 색다른 표현처럼 느껴질 수 있는데 이는 다른 언어의 switch-case 구문이다.switch-case 구문에서 변수의 범위를 지정하는 일이 귀찮은데, 코틀린에서는 이 부분을 많이 개선한 것 같다. when(x) {1 -> { 내용... }2 -> { 내용... }else -> { 내용... }} when(x) {1, 2 -> { 내용... }in 10..30 -> { 10에서 30까지 }!in 10..30 -> { 10에서 30까지에 포함되지 않..

코틀린(Kotlin)을 이용하면 findViewById()를 사용할 필요가 없다

코틀린에서는 더 이상 findViewById()를 사용하지 않아도 된다.정확히는 Kotlin Android Extension만 적용시키면, 레이아웃을 import 시키는 것만으로도 XML에서 정의내린 위젯들을 Id로 읽어들여 하나하나 변수로 만들어줄 필요가 없어졌다. textviewID라는 ID를 가지는 요소를 XML에서 정의했다고 치자.자바에서는 말할 것도 없이 findViewById()를 사용하는 방법부터 써먹을 것이고, 코틀린에서도 전통적인 자바의 방식을 사용하는 사람들이 많을 것이다. TextView textViewID = findViewById(R.id.ui_text_hello) as TextView textViewID.text = "기존의 방식"이 방식이 아예 틀린 방식이거나 구 시대의 잔재라..

728x90