線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:9036
推到 Plurk!
推到 Facebook!

圖片分割,亂數排列

 
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-15 15:42:20 IP:211.76.xxx.xxx 訂閱
因此問題: ■【BCB】【問題】關於用陣列切割圖片的問題  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=49094 我覺得好像可以寫一個給小朋友玩的拼圖遊戲 < > 程式很簡單,不想下載的,看看以下的原始碼應該就了了 < >
//---------------------------------------------------------------------------
// 圖片分割,亂數排列  by dllee http://dllee.ktop.com.tw
// 本範例使用了以下技巧:
// 1. 使用 Canvas->CopyRect() 分割圖片
// 2. 動態產生物件
// 3. 使用 TList 儲存元件
// 4. srand, random 產生亂數的方法
// 5. 產生不重複亂數(抽牌法)
//---------------------------------------------------------------------------
#include 
#pragma hdrstop    #include "PartPictureUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  MyImageList=new TList;
  Image1->AutoSize=true;
  Image1->Visible=false;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int Part=StrToIntDef(Edit1->Text,3);      // 決定分割數
  if(Part<1 || Part>9) Part=3;
  Edit1->Text=String(Part);      int Seed=StrToIntDef(Edit2->Text,4040);   // 決定亂數種子
  Edit2->Text=String(Seed);
  srand(Seed);      if(OpenPictureDialog1->Execute())         // 選檔
  {
    for(int i=0;iCount;i  )   // 刪除上次的 Image 元件
      delete ((TImage*)MyImageList->Items[i]);
    MyImageList->Clear();        TStringList *index=new TStringList;     // 亂數陣列(抽牌法)
    for(int i=0;iAdd(String(i));
                                            // 載入原始圖
    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);        for(int i=0;iParent=this;
        img->Width=Image1->Width/Part;      // 決定大小
        img->Height=Image1->Height/Part;
        img->Canvas->CopyRect(Rect(0,0,img->Width,img->Height),
          Image1->Canvas,                   // 由原圖按順序切割成小圖
          Rect(i*img->Width,j*img->Height,(i 1)*img->Width,(j 1)*img->Height));            ThisIndex=random(index->Count);     // 以亂數決定此小圖的顯示位置
        PosIndex=StrToInt(index->Strings[ThisIndex]);
        index->Delete(ThisIndex);
        img->Left=(PosIndex/Part)*(img->Width 5); // 每小圖分隔 5 點
        img->Top =(PosIndex%Part)*(img->Height 5)   50; // 保留上面 50 點給按鈕            MyImageList->Add(img);              // 加入 ImageList 以便管理
      }
    delete index;                           // 已抽完牌,無用了,可刪除
  }
}
//---------------------------------------------------------------------------
沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
附加檔案:50139_PartPicture.zip
ekx
一般會員


發表:3
回覆:3
積分:1
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-22 21:11:38 IP:218.168.xxx.xxx 未訂閱
dllee大大您好,我將此程式簡單修正為...Image1是原圖 ,並show出其大小 (假設是100*100好了)Image2是亂數切好的圖,並由使用者輸入他要分割的的大小(假設是10*10)。 我的問題是要怎麼從這10*10個區塊中亂數抽出一些區塊,比如抽10塊,然後再算出這十塊的重心呢? 謝謝 我還是新手,有很多地方都不懂呀
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-06 10:06:44 IP:211.76.xxx.xxx 訂閱
有人問到,以下程式是作什麼用的?

ThisIndex=random(index->Count);     // 以亂數決定此小圖的顯示位置
PosIndex=StrToInt(index->Strings[ThisIndex]);
index->Delete(ThisIndex);
說明如下:
ThisIndex=random(index->Count);
由剩下的牌中抽出一個序號
PosIndex=StrToInt(index->Strings[ThisIndex]);
index->Strings[ThisIndex] 表示抽出來的牌的內容(文字內容,為0到N-1的一個數字) StrToInt() 再把它轉存數字 最後給 PosIndex 也就是決定這個小圖所要顯示的位置 Index
index->Delete(ThisIndex);
牌已抽出,所以把抽出的牌從剩下的牌中去除 http://www.ViewMove.com 視動自動化科技股份有限公司 ViewMove Technologies, Inc. 發表人 - dllee 於 2004/06/06 10:08:37
------
http://www.ViewMove.com
musicwei23
一般會員


發表:0
回覆:1
積分:0
註冊:2006-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-10-19 14:24:13 IP:163.25.xxx.xxx 未訂閱
請問一下要怎麼讓圖片可以移動呢
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-02 22:29:59 IP:59.105.xxx.xxx 訂閱
移動圖片或移動元件的方法,在本站內有許多文章介紹過了,請利用搜尋功能找找看吧。
------
http://www.ViewMove.com
系統時間:2024-04-19 19:51:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!