Esempio n. 1
0
        //string imgurl에서 다운받아와 이미지를 얻어낸다.
        //그리고 flyingbox의 x 위치, y 위치가 생성 위치에 영향을 준다.
        public static void addDatas(ILwin.ShowScreen showscreen, WebItem thisitem, string imgurl, int box_posX, int box_posY)
        {
            //download image from url via internet
            thisitem.xPos = box_posX; thisitem.yPos = box_posY;

            //image(BitmapImage)를 URL로부터 얻어온다.
            thisitem.img = HTMLhandler.downloadImageFromURL(imgurl);
            thisitem.imgBr = new ImageBrush(thisitem.img);
            
            //********freezable 문제가 발생. 이미지 리소스에 freeze를 시행해 주자!
            thisitem.img.Freeze();
            thisitem.imgBr.Freeze();
            

            //이제 이미지를 연결하고 화면에 나타나도록 하여라
            showscreen.getMWinReference().Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
                {
                    thisitem.imgrec.Width = thisitem.img.Width;
                    thisitem.imgrec.Height = thisitem.img.Height;

                    //이미지의 가로나 세로가 100보다 큰 게 있다면 그 부분은 100으로 줄인다.
                    if (thisitem.imgrec.Width > 100) thisitem.imgrec.Width = 100;
                    if (thisitem.imgrec.Height > 100) thisitem.imgrec.Height = 100;

                    thisitem.imgrec.Margin = new Thickness(thisitem.xPos, thisitem.yPos, thisitem.imgrec.Margin.Right, thisitem.imgrec.Margin.Bottom);
                    thisitem.imgrec.Fill = thisitem.imgBr;
                    thisitem.imgrec.Visibility = Visibility.Visible;         //이제 표시한다.
                }));


            //************************************//
            
            System.Drawing.Bitmap abit;
            using(MemoryStream outStream = new MemoryStream())
            {
                BitmapEncoder enc = new BmpBitmapEncoder();
                enc.Frames.Add(BitmapFrame.Create(thisitem.img));
                enc.Save(outStream);
                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream);

                abit = new System.Drawing.Bitmap(bitmap);
            }

            abit.Save("temimg.png");
            
        }
        //webImage를 생성한다. 단, 더 생성 가능한지만 확인하고, 가능하다면 스레드를 돌린다.
        public void generateWebImage(string query, int num)
        {
            if(MWin.getDatasReference().webItems.Count + num > Constants.MAX_WEB_ITEMS )
            {
                MWin.getTextboxReference().printMSG(MWin.responseMsgs, "최대 Web Item 개수를 넘는다. 안돼");
                return;
            }

            if(doingWebitem == true)
            {
                MWin.getTextboxReference().printMSG(MWin.responseMsgs, "지금은 Web Item을 떨어뜨리는 중이다..");
                return;
            }

            //떨어뜨리는 도중에는 doingwebitem을 true로 하여 중복되지 않게 하자.
            doingWebitem = true;

            //이미지들을 생성하기 전, 현존하는 webitems의 수를 가져온다.
            int startCount = MWin.getDatasReference().webItems.Count;
            MWin.getTextboxReference().printMSG(MWin.responseMsgs, "startCount : " + startCount);

            //num 개수만큼 webitem을 추가한 뒤, startCount와 num을 이용해 그것들을 참조해나갈 것이다.
            for (int i = 0; i < num; i++)
            {
                WebItem wb = new WebItem(this, rnd.Next(350, 371));
                MWin.getDatasReference().webItems.Add(wb);
                MWin.getTextboxReference().printMSG(MWin.responseMsgs, "added " + i + " webitem");
            }

            //만일 3개의 이미지를 요청했고, startCount가 2라면, 현재 2개의 item이 존재하며, webimagelist (2) (3) (4)를 만드는 것이다.
            Thread thr = new Thread(() => generateWebImageThread(MWin.getDatasReference(), flyingbox, query, startCount, num, this));
            thr.Start();
            
        }
Esempio n. 3
0
        //이제 그 이미지를 화면에 표시하고, 아래로 추락시키는 스레드를 연결시킨다.
        public static void fallingItem(ILwin.ShowScreen showscreen, WebItem thisitem, bool isFinal)
        {
            int item_y = 0;


            while (true)
            {
                //현재 webitem의 margin top 값을 가져온다
                showscreen.getMWinReference().Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
                    {
                        item_y = (int)thisitem.imgrec.Margin.Top;
                    }));

                Thread.Sleep(50);

                if (item_y > thisitem.FallYpos)
                {
                    break;
                }

                else
                {
                    showscreen.getMWinReference().Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
                        {
                            thisitem.imgrec.Margin = new Thickness(thisitem.imgrec.Margin.Left, thisitem.imgrec.Margin.Top + 8,
                                thisitem.imgrec.Margin.Right, thisitem.imgrec.Margin.Bottom);

                        }));
                }

            }


            //마지막 webitem이라면 다 떨어질때까지 더 webitem을 호출하지 못하도록 블록을 시킨 걸 해제한다.
            if (isFinal == true)
            {
                showscreen.doingWebitem = false;

                //박스 이미지를 일반 이미지로 바꾼다.
                flyingBox.changeImg(showscreen.getFlyingboxReference(), showscreen.getMWinReference(), false);
            }
                
                
        }