목차

반응형

EasyAR 3D Object Tracking Feature sample hexagon application

넴 제가 올린겁니다 허접하지만 리뷰처럼 한번 해봤습니다.

EasyAR 아직 사용하기에는 무리가 있는 것 같군여

반응형
반응형

필자는 뷰포리아의 Model Target Generator의 오브젝트 불러와서 인식시키는 기능을 사용해보려고 했다.

내가 불러왔던 파일은 .fbx 파일로 용량이 10메가가 넘어가는 꽤나 복잡한 모델파일이었다.

흠 fbx 파일 임포팅 하니까 바로그냥

there was a problem converting your cad model...

에러가 떠버린다.

해결방법을 찾아보았으나 아직까지는 MTG의 오류에 대한 질문만 있을 뿐 해결법은 없더라.


그래서 형한테 fbx파일을 MTG에서 지원하는 모든 모델 파일 형식으로 달라고 해서 임포팅을 시도하였다.


그리고 레퍼런스 읽어보면 폴리곤이 너무 많으면 줄여야한다는 말이 있어서 모델파일 일부분만 떼어서 폴리곤 수 적은 버전으로도 달라고 했다.(근데 테스트하는 도중 MTG는 내가 원하는 방식이 아니란 것을 깨닫고 얘로 테스트 안해봄)


그리고나서 obj 파일로 읽는데 30분정도 읽는 중이라고만 뜨고(최소화도 안됨, 화면 정가운데 차지해서 ㅃ침 ㅡㅡ)


EasyAR같은 경우는 어떻게하나 찾아보고 있었다(이새끼들도 웃김 가이드 보면 api키 넣는 것만 알려주고 그 이후로는 내용이 없음 ㅋㅋㅋ)


그러다가 MTG는 내가 원하던 방식이 아니란 것을 깨달았다.

아마 MTG로 detection 데이터를 생성할때 특정 detection position을 정해야한다. 그리고 그에따른 실루엣도 생기고 유저는 해당 실루엣을 가이드 삼아서 모델인식을 할 수있다.

근데 내가 원하는건 모델의 360도 모든 방면에서 인식이  가능하도록 하는 것이기 때문에 포기했다.

그리고 vuforia측에 질문을 던져놨다.


360도로 측정이 가능한가? : 방금 봐보니까 어떤 사람이 '님 그러면 pro로 사서 다방면으로 모델 찍은다음에 그거 다 올려버리셈' 이랬다.

https://developer.vuforia.com/forum/model-targets/it-possible-detect-object-regardless-detecting-position-device#comment-63389


그리고 누가 model targets advanced recognition이라는 것에 대해서 질문했는데 인터넷에 찾아봐도 안나와서 이게 뭐하는 기능인지도 물어봤다.

https://developer.vuforia.com/forum/model-targets/what-model-targets-advanced-recognition

답장없긴한데 흠... 저게뭘까? 내가 추측하기엔 저게바로 그 vuforia에서 얼리액세스로만 내놓은 기능인것같다. (아마도 360도 모든 방면에서 모델 측정하는 기술!?) => 답장을 받아봤는데 결국 model target recognition을 여러개 등록할 수 있도록 발전한거지 360도 인식하는 기술은 아니라고 한다.


뷰포리아에서 공식적으로 올려놓은 참고사항

The best import results have been observed with Creo View, Collada, FBX and JT.

Cero View, Collada, FBX, JT가 MTG로 불러와서 작업할때 효율이 좋다.


If the model has more than 400,000 polygons or more than 10 parts, the model will need to be simplified.

모델의 폴리곤이 400,000 이 넘고 10개 파트 이상으로 되어있으면 최적화나 축소시켜라


Vuforia Image

그리고 참고로 저건 튜토리얼에 나오는 샘플 모델파일인데 용량이 1mb채 안되는 것을 보아 고용량의 모델파일은 원체 못불러올것같기도하다.

반응형
반응형

apple에서 만들었다.

ARkit 트래킹 기능이 별로없다.

https://developer.apple.com/kr/arkit/

현재 이미지 트래킹도 겨우겨우? 하는것같고 3d 오브젝트 타게팅은 아예 지원 안하는 것 같다.

뷰포리아나 EasyAR 가져다가 ios용으로 빌드해서 쓰는게 나은듯하다.

반응형
반응형

3d 오브젝트 인식


AR에서 가장 중요한건 인식이다.


현실의 3d 물체를 인식하기 위해서는 2가지 방법이 있는 것 같다.

1. 스캐너를 사용하여 특정 사물을 인식, 데이터 생성

이 방법은 인식할 수 있는 사물의 크기가 제한적이라는 단점이 있다(뷰포리아에서 해당 기능은 인도어, 사무용품에 적합하다 말했음)

요거 프린트해서


요렇게 저자리에다가 인식할 사물 넣고


스캐너 앱으로 요리조리 인식해주고

https://library.vuforia.com/articles/Training/Vuforia-Object-Scanner-Users-Guide


앱켜보면 이렇다.

인식만 제대로하면 성능은 끝내주는것같다.

나는 지금 실제 차량을 인식할꺼라서 사이즈가 안되서 못써먹지 좋은기능이다.


2. 3d 사물, Geometric vertex, obj 파일같이 3d 오브젝트 데이터를 읽어서 인식

이 기술은 지금 뷰포리아에서 만들고 있고(만들어서 내놓은것같음) EasyAR에서도 만들어서 내놓았다.

뷰포리아에서는 Model Targets이라고 부르고

EasyAR에서는 3D Object Tracking이라고 부른다.

https://www.easyar.com/doc/EasyAR%20SDK/Guides/EasyAR-3D-Object-Tracking.html

https://library.vuforia.com/articles/Solution/model-target-generator-user-guide.html

둘다 유니티 모델파일인 fbx도 지원하는 것 같다. (CAD 파일도 지원하고 다양하게 지원하는 것 같음)

뷰포리아는 모델파일을 불러와서 설정하는 프로그램도 있는 것 같지만 EasyAR은 그렇게까지는 지원하지는 않는듯 하다.


한번 둘다 해보고 후기남기게따

반응형
반응형

창업 관련해서 AR을 사용할 일이 있어서 조사하게되었다.


현재 유니티 AR의 두 기업을 살펴보았다.


Vuforia


EasyAR


뷰포리아

현재 유니티에서 바로 에셋번들을 임포트하여 사용가능하다

한번 테스트삼아 해보았는데 코드한줄 필요없이 바로 적용이 가능하다.

난이도가 엄청 쉬워서 놀랐다.


https://unity3d.com/kr/partners/vuforia

이 사이트로 가보면 유니티에서도 뷰포리아랑 무슨 파트너쉽을 맺었는지(맺었겠지 머)

이미지 타겟, 오브젝트 타겟, VuMarks, 기기 추적

이미지 타겟하고 오브젝트 타겟밖에 안살펴보았다.

이미지 타겟은 유니티 앱에서 AR 카메라를 넣은다음에 해당 AR 카메라 설정값에 추적하고자 하는 이미지를 등록한다.

단순히 이미지를 드래그하는 것은 아니고 뷰포리아 서버에서 제공하는 tracking에 관한 database에 등록을 해야한다.

어느정도 사용하는 것은 무료이지만 본격적으로 사용하거나 개수를 늘리려면 라이센스 비용을 지불해야하는 것 같다.

어쨌든 기본적으로 제공하는 샘플들도 있고 애초에 새로 만들어서 테스트해보면 엄청 심플한 것을 느낄수 있다.


얼마나 심플하냐면 AR 카메라 추가하고, 카메라에 뷰포리아에서 샘플로 제공하는 tracking 이미지를 추적하도록 등록하면 이미지가 씬에 나타난다

그리고 해당 이미지에 3d 물체를 자식 객체로 넣어주면 끝이다.

앱 실행하면 카메라가 나오는데 카메라로 이미지를 비추면 이미지에 내가 넣은 위치대로 바로 나온다




아맞다 근데 XR 설정가서 뭐좀 체크해줘야한다.

튜토리얼

https://library.vuforia.com/articles/Training/getting-started-with-vuforia-in-unity.html#betas

타겟 db 추가

https://developer.vuforia.com/targetmanager/project/checkDeviceProjectsCreated?dataRequestedForUserId=


EasyAR

얘는 아직 안해봤다.

근데 뷰포리아같은 경우는 유니티 설정 - 인앱까지 어떻게하는지 설명만봐도 이해가 가는데

얘네는 유니티 설정까지만 설명이 나와서 인앱에서 어떻게 처리되는지 모른다.

샘플앱을 받아봐서 분석을 해봐야할 것 같다.

그리고 코드도 필요한것같다.

일단 뷰포리아부터 다 해보고 얘네도 해볼예정

내가 가장 중요하게 보는 부분은 인식률



반응형
반응형

오디오에 대하여 프로그래밍 하려고 함.

최종적인 목표는 C#으로 게임 OST같이 한번에 많은 음악파일들을 하나의 음악파일로 합쳐놨을때 공백을 구분하여 따로따로 분리해주는 프로그램을 만드는 것.

반응형

'C# > C#' 카테고리의 다른 글

C# 한양대학교 학식 크롤링 프로그램  (0) 2016.03.02
C# 콘솔 Output 보기  (0) 2016.02.24
C# 네이버 웹툰 크롤링 프로그램  (1) 2015.11.16
반응형

hsb.exe


학식 보는 프로그램을 만든다. 일단 C#에서 만들고 안드로이드에서도 만들예정.


저번에 웹툰프로그램 만들면서 html페이지를 전부다 불러오고 특정 코드앞에서 받아오는 형태의 노가다로 파싱해왔는데 html agility pack을 이용해서 효울적으로 만들 수 있었다.

앞으로는 이것을 이용해서 할 생각

1. agility pack을 이용한다.

http://stackoverflow.com/questions/846994/how-to-use-html-agility-pack

대충 정리해놓자면

foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table[@summary='식당정보']"))

label.text += table.InnerText;

라고 한다면 doc의 html 코드중 summary 속성값이 식당정보인 모든 테이블을 가져오고 그 아래의 반복문은 해당테이블의 텍스트값을 라벨에 누적해서 넣는것.

즉 모든테이블의 텍스트가 라벨로 들어가게 된다.


-----설치방법------

Visual 스튜디오에서 프로젝트 우클릭후 Manage Nuget Packages로 들어가서 HtmlAgilityPack을 설치.

agility pack은 xpath를 사용하는데 

http://www.w3schools.com/xsl/xpath_examples.asp

여기서 대강 사용법을 알 수 있다. 나중에 정독 예정.

정독해보았는데 //와 /의 사용법만 알아두면 충분한것같다.


일단 야매로 대충 어떤 테이블의 첫 td 값이 중식/석식 일때 그때 2번째 테이블의 값을 알아오는 기능을 구현하였다.

그런데 인코딩문제인지 먼지 계속 외계어로 떠서 인식이 불가능함 현재 연구중...

그 원인을 찾았다. 계속 utf-8로 인코딩했는데 알고보니까 학식페이지 가보면 utf-8이 아니고 euc-kr로 되어있음.

http://stackoverflow.com/questions/14793650/wrong-encoding-with-html-agility-pack

위의 사이트를 들어가면 페이지가 euc-kr로 인코딩 되어있을때 문서 불러오는 방법 나와있음.


구현해야 하는 것들


총 6개의 식당 -> 6개의 Tab

일단 tabcontrol을 사용하여 6개의 식당 탭을 만들었다. 각 탭의 라벨이라던가 버튼의 내용물은 for문을 사용하여 동적 생성함.

여기서 한가지 알아낸점은

첫번째 탭컨트롤에 버튼을 추가하고 두번째 탭컨트롤에 버튼을 추가하는식으로 for문을 돌려서 컨트롤을 추가해야지 탭페이지에 나타나는데

요소는 tabPage1, tabPage2, tabPage3 ... 이라서 for문으로 각 tabPage를 호출하는 방법이 없다.

그러나 tabControl1.TabPages[i].Controls.Add(panels[i, j]); 를 사용하여 각각의 tabPage를 호출하는 방법이 있다.

또한 각각의 탭에는 날짜의 개수만큼의 패널을 동적으로 생성하여 집어넣었다.

1번식당tab

월요일 패널

버튼,버튼,라벨

화요일 패널

버튼,버튼,라벨

.

.

.

토요일 패널

버튼,버튼,라벨

이런형식이다.



각각의 식당마다 월~토 운영하는 날의 개수가 다름

친구에게 물어보았다.

각 1번식당은 금요일까지만 운영하고 2번식당은 토요일까지 운영하는데 이것을 알고있으니까 1번테이블만 5일치 받아오고 2번식당만 6일치 받아오는것이 나은가?

아니면 요일개수를 카운트하는 기능을 넣는것이 나은가?

친구말로는 나중에 바뀔때 수정하기가 귀찮으므로 이럴때는 그냥 카운트하는 기능을 추가하는 것이 맞다고 하였다.

그래서 식당의 개수가 몇개인지 카운트하는 기능을 넣었다.

함수명은 check_number_of_days();

html 코드를 보니까 요일명이 들어가는 td는 테이블 헤더로 해놓았다. 따라서 모든 th의 텍스트중 요일이 들어가는 경우 해당 식당의 날짜개수 카운트를 ++해준다.

예로 2번식당에는 토요일까지 운영하면 월요일, 화요일..., 토요일까지 테이블에 표기가 되므로 위의 코드에 의하여 6이된다.



메뉴 개수가 식당마다 다름

이것은 어떻게 할지 고민했는데 아래에 메뉴표기기능에서 알아서 해결됨.



메뉴의 가격 보여줘야함

이것도 어떻게할지 고민했는데 메뉴표기기능에서 해결함.


운영안하는 날

1번식당은 토요일날 운영을 안하는데 사용자가 토요일로 가면 어떻게 표기할지.

각 식당마다 운영정보 없음을 나타내는 패널을 하나씩 만든다음 운영정보가 없는 날에는 해당 패널을 보여주도록 함.


날짜 표기

오늘 날짜 알려주는 기능과 요일까지 표시해주는 기능.

today = (int)(ClockInfoFromSystem.DayOfWeek + 6) % 7; // 월요일 0 화요일 1 수요일 2 ... 일요일 6 으로 표기되도록함.

label = 오늘 날짜 + (스위치문 위의 today값이 2면 '수'를 붙임, 3이면 '목'을 붙임)

이런형식


날짜 넘어가는 기능

today를 위의 코드로 알맞은 인덱스 값으로 초기화시켜놓고 앞으로가기 버튼을 누르면 1추가 뒤로가기 누르면 1감소

만약 6을 넘어가버리면 다시 0으로 가는 형식.

그리고 인덱스에 해당하는 패널을 보여준다.


move_pre_panel()도 비슷함.

아 헷갈린것은 datetime++; 이아니고 datetime=datetime.AddDays(1);을 해줘야 한다는 점.

now_day는 today를 받아온것이다.



괄호로 영어로 표기된부분 없애자 -> 아직 미구현 구현해야함

영어로 표기해놓은 것은 쓸모없고 자리만 차지해서 없애야한다.


고정된 폼크기

http://ndolson.com/1552

http://stackoverflow.com/questions/13381127/preventing-winform-from-being-maximized



메뉴 보여주기(제일 중요함, 제일 어려움)

제일 어려운 부분이다.

시작하자마자 어디서부터 시작할지 막막했다.


무엇을 탐색하나?

공통 간식 여부

공통찬 여부

아침 점심 저녁인지 점심 저녁인지 여부

월화수목금토인지 월화수목금인지 여부

교직원식당 학생식당 구분 여부


식당정보는 summary 속성의 값이 식당정보다

즉 테이블중 summary속성의 값이 식당정보인 것의 테이블 소스를 가져와서 보여주자.


애초에 html agility pack에 테이블을 가져오는 튜토리얼이 있음

http://stackoverflow.com/questions/9265313/parsing-html-with-htmlagilitypack-and-loading-into-datatable-c-sharp

http://stackoverflow.com/questions/655603/html-agility-pack-parsing-tables


LINQ-to-Objects 라는 되게 손쉬운 방법이 있는듯함

나중에 사용하여 구현해보자


c# 테이블 사용방법


foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table[@summary='식당정보']"))

                {

                    label2.Text += "Found: " + table.Attributes["summary"].Value + "\n";

                    foreach (HtmlNode row in table.SelectNodes("tr"))

                    {

                        foreach (HtmlNode cell in row.SelectNodes("th|td"))

                        {

                            label3.Text += "\n"+cell.InnerText;

                        }

                    }


                }

에서 왜 foreach (HtmlNode row in table.SelectNodes("tr")) tr이 //tr로하면 모든 tr을 다받아오나? // 그냥 foreach문이 그런것



요일몇개까지있나 확인은 if(ths.InnerText.Contains("요일")) 이것으로 요일 들어가는 문자열개수를 카운트함.


http://stackoverflow.com/questions/9199080/how-to-get-the-integer-value-of-day-of-week

                            labels[i].Text += "\n" + cell.InnerText.Replace(" ", "");

로 원하지않는 문자열 필터링 가능


갑자기 html agility pack 사용중 개체참조리퍼런스 에러가 뜸 해결법 찾는중

이유 : 테이블안에 tr 안에 td가 있으면 //table 하고 바로 td하면 안되고 tr/td 해야 먹힘 !!중요!!

안되는 이유 - 안에 <tr>이랑 \n이 있으면 널이 아님처리되서 그러니까


이제는 마지막 가격이 아래로 내려가부림;;

실행할때 dll파일없이 실행하려면  IlMerge를 사용

반응형

'C# > C#' 카테고리의 다른 글

C# - Audio Programmning  (1) 2016.04.25
C# 콘솔 Output 보기  (0) 2016.02.24
C# 네이버 웹툰 크롤링 프로그램  (1) 2015.11.16
반응형

C# 프로젝트 하위 덩어리 오른쪽 properties -> output type -> console application

반응형

'C# > C#' 카테고리의 다른 글

C# - Audio Programmning  (1) 2016.04.25
C# 한양대학교 학식 크롤링 프로그램  (0) 2016.03.02
C# 네이버 웹툰 크롤링 프로그램  (1) 2015.11.16
반응형




완성본


1. 네이버 웹툰에서 이미지를 다운받아오는 기능 구현

네이버에서는 단순히 donloadfileasync함수만으로 다운받으면 403 access denied 오류(피들러로 확인)를 받는다.

확인해본바로

wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

wc.Headers.Add("Content-Type", "application / zip, application / octet - stream");

wc.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");

wc.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");

wc.DownloadFileAsync(new Uri(remoteAddress), fileName);

와같은 함수로 request에 부가적인 내용을 전송해야 사용자로 인식하여 403에러를 안내놓는다고 하였다.

피들러로 정상적인 request와 비교하여 user-agent와 content-type accept-encoding accept를 추가하였으나 바뀌지않음

구글링하다가 wc.Headers.Add("Referer", "http://comic.naver.com/"); referer를 추가해보라는 말을 듣고 추가해보았음.

주소는 comic.naver.com request를 작동시키는데 성공함 (referer만 있어도 정상작동)

referer가 어떤것인지에대해서는 잘 모르겠음.

다만 찾아보니 이전에 있던 페이지에 대하여 나타내는 정보로 

referer가 comic.naver.com이면 이 요청은 comic.naver.com페이지에서 보내는 것이라는 정도...?

예로 http://imgcomic.naver.net/webtoon/119874/772/20151109162819_a6fdbf0fa4dc67716b370d99fd60e050_IMA

G01_5.jpg를 방문하면 이전에 있던 페이지가 없어서인지 403 오류가 뜸.


2. 이미지 개수 파악, 각 이미지 파일의 주소를 파악.

html 파일로부터 위에 해당하는 텍스트를 가져와야함.

예시 코드)) 

<img src="http://imgcomic.naver.net/webtoon/119874/772/20151109162819_a6fdbf0fa4dc67716b370d99fd60e050_

IMAG01_1.jpg" title="" alt="comic content" id="content_image_0" 

onerror="this.src='http://static.comic.naver.net/staticImages/COMICWEB/NAVER/img/common/blank.gif'" 

onload="loadImageEvent(this);" oncontextmenu="return false" ondragstart="return false" onselectstart="return 

false" class="">

이 코드에서는 http://imgcomic.naver.net/webtoon/119874/772/20151109162819_a6fdbf0fa4dc67716b370d99fd60e050_

IMAG01_1.jpg를 가져와야함.

이거하다가보니 2가지 방법을 찾았다.

i)agility pack(html 파싱할때 사용하는 도구?? 사용안해봐서 잘 모르겠음) 사용

ii)regex함수를 사용하여 약간 노가다식으로 구하기

http://www.csharpstudy.com/Practical/Prac-regex-1.aspx

http://www.csharpstudy.com/Practical/Prac-regex2.aspx

일부만 참고함.

agility pack은 어떻게 사용하는지 모르고 설치하는 방법도 몰라서 익숙한 regex를 사용하기로함.

일단 원하는 주소의 소스코드를 가져온뒤 스트링에다가 집어넣었음.

원하는 이미지는 항상 http://숫자.jpg" title="" alt="comic content" id="content_image_숫자" 식

따라서 해당부분을 regex를 사용하여 소스코드 스트링에서 싹다 찾아오기로함.

그과정에서 c#의 escaping 문자열에 대한 정보를 알게됨.

문자열을 나타낼때

string s = "asdsd"인데

asd"asd를 스트링으로 표현하려면

string s = "asd\"asd"으로 해야함.

대부분의 특수문자는 앞에 \를 붙여야함 \는 \\로

그리고 이게 귀찮아서 @를 붙일수가있음.

string s = @"asd\asd"하면 s에 asd\asd가 저장됨

단 예외로 "는 @를 붙이면 ""로 나타내고 ?는 \?로 나타내야함.

더많은 예외가 있겠지만 코딩하면서 위의 정보만 필요했음.

escaping in c#에 대한 정보글

http://www.codeproject.com/Articles/371232/Escaping-in-Csharp-characters-strings-string-forma 큰 도움되었음

또한 regex에서의 와일드카드를 사용한 검색방법에 대하여 알게됨.

요점만 말하자면 ^는 앞에서 시작하는 것 .*는 * ?는 .$로

예시 foo*.xls? will get transformed to ^foo.*\.xls.$

내가 찾고 싶은 것은 "http//로 시작해서 뒤에 주소가 붙고 title="" alt="comic content" id="content_image_숫자 형식이어야함


따라서 Regex regex = new Regex(@"http://.*"" title="""" alt=""comic content"" id=""content_image_");

를 하면 http부터 image_숫자 <- 숫자 전까지 긁어올 수 있음.

while (m.Success)

{

label1.Text+=m.Index + m.Value;

m = m.NextMatch();

}로 배열에 m.Value를 "로 스플릿하여 앞부분을 집어넣음으로써 모든 이미지 주소를 넣는다.

도중에 찾음.

메타문자 의미

------------------------

^ 라인의 처음

$ 라인의 마지막

\w 문자(영숫자) [a-zA-Z_0-9]

\s Whitespace (공백,뉴라인,탭..)

\d 숫자

* Zero 혹은 그 이상

+ 하나 이상

? Zero 혹은 하나

. Newline을 제외한 한 문자

[ ] 가능한 문자들

[^ ] 가능하지 않은 문자들

[ - ] 가능 문자 범위

{n,m} 최소 n개, 최대 m개

( ) 그룹

| 논리 OR


3. 파일명과 확장자를 받아오는데 이것이 개판이라서 확장자명을 알아내고 파일명도 AEFJFJAFAAWDJRHG.JPG가 아닌 보기좋게 나타내도록 함.

파일명은 후에 인덱스값을 이용하여 나타내고 확장자는 위와 같은 원리로 찾아냄.

만화 메인주소를 알려준다

4. 만화 목차페이지에서 각화의 주소를 가져온다

<a href="/webtoon/detail.nhn?titleId=662774&no=11&weekday=wed

태그로부터 만화주소를 찾아낸다.

5. 제일마지막화수 알아내기(인덱스에 사용)

최대 화수를 전역변수 max를 사용하여 저장.

max값은 html소스에서 최대화수를 나타내는 값을 불러옴.

이를 이용하여 최대 지정가능한 화수를 정함.

6. 저장한 값을을 배열에 넣기

제일 어려운 부분인 것 같음.

c#에는 배열이 3개있는데

하나는 list

다른하나는 listarray

다른하나는 array

셋의 차이는 잘 모르겠지만 list는 배열의 값을 명시안해주고 막 넣은뒤에 불러올 수 있어서 list를 사용하려했으나 2차원 배열로 list를 다루기가 어려워서 포기

listarray또한 2차원 배열로 다루기가 어려워서 포기

마지막 array로 2차원배열을 사용하기로함. 

헷갈린것은 배열선언할때 0부터 시작하는 것이 아님

ex

[2,3]하면

0ㅁㅁㅁ

1ㅁㅁㅁ임

0ㅁㅁㅁ

1ㅁㅁㅁ

2ㅁㅁㅁ가 아니라

마지막 6

모든 이미지를

쉬운데 진작할걸

[a,b]형식으로 2차원배열을 나타냄.

처음에는 string[,] imgaddr; 전역변수 형식으로 선언한뒤에 후에 max값을 찾아내면 그 때 배열길이를 정함.

총 몇화인지 나타내는 것은 앞의 숫자 뒤에 숫자는 각화의 이미지를 넣으려고함.

각화마다 이미지의 개수가 각각 다르고 이미지가 100개는 안넘어갈테니결국에는 대충 [max,100]으로 지정함

프로그램의 토대는 다만든뒤 추가적인 기능을 구현함.



1.다운로드 경로 지정


2.파일명 사용자가 조절 // 2화 2번째 이미지는 2.2로 저장됨 쓸모없는듯 삭제


3.화수별로 폴더만들어서 넣어주기 체크로 설정


4.다운로드 화 사용자가 조절기능 // 시작값은 0을 넘어야하고, 끝값은 max를 못넘어감


5.만화이름 가져오기 // 위에서 따온것처럼 함.

소스를 가져오면서 getsource사용시 한글이 깨져버리는것을 

Uri url = new Uri(textBox1.Text.

WebClient client = new WebClient();

client.Encoding = System.Text.Encoding.UTF8;

source = client.DownloadString(url);

사용하면 한글로 가져와짐.


기본 저장경로로

string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

뒤의 변수는 유저의 바탕화면 경로.

6. 이미지를 화별로 보여주는 html파일 추가

wrtieline기능으로 구현하기가 쉬웠음.

7.다운받는 화수가 100의 자리가 넘어가면 시간이 많이 걸리기때문에 100의자리가 넘어가면 100단위로 분할하여 다운받는 기능 추가

마지막에 기능 낑겨넣느라 더러워지긴했음. end-start가 100넘어가면 분할한뒤 img다운 함수를 분할한 범위에 각각 사용함.

프로그램을 만드는 도중 이상한것을 깨달았다

이렇게 원시적인 방법이 아니라 더욱 쉽게 가져오는 무언가가 있을터인데...

원초적인 원시적인 파싱말고 무언가 있을것이다...

http://stackoverflow.com/questions/12935398/get-html-element-by-value를 참고한뒤

html태그를 사용하여 데이터 처리하는 방식을 찾아서 사용해보자

일단은 하던방식대로 전부다 하기로함.

약간 막무가내로 만들어서 도중에 혼란스러웠음.

다시한번 깔끔하게 만들어볼 생각

본인은 프로그래밍 공부용으로 만들었음.

모르는 것은 물어보면 대답합니다.


반응형

'C# > C#' 카테고리의 다른 글

C# - Audio Programmning  (1) 2016.04.25
C# 한양대학교 학식 크롤링 프로그램  (0) 2016.03.02
C# 콘솔 Output 보기  (0) 2016.02.24