//--------------------------------------------------------------------------- #include #include #pragma hdrstop #include "l_bitmap.h" #include "grouping_lib1.h" #include "grouping_lib2.h" #include "MainImage.h" #include "PenManager.h" #include "NewGrouping_F.h" #include "Palette.h" #include "FullView.h" #include "blurControl_F.h" #include "stdlib.h " #include "Define.h" #include #include "NewGrouping_Viewer.h" // for ImageViewer 2004. 6. 25 #include "LogData.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "TPImage" #pragma link "TPLayerImage" #pragma link "Selector" #pragma link "RzEdit" #pragma link "RzSpnEdt" #pragma link "RzButton" #pragma link "RzRadChk" #pragma link "RzTabs" #pragma link "RzTrkBar" #pragma resource "*.dfm" //--------------------------------------------------------------------------- #define MAXCOLORNUM 50 #define IDS_NGZOOM StringTable[0] #define IDS_NGIMAGE StringTable[1] #define IDS_NGIMAGEIMAGE StringTable[2] #define IDS_NGIMAGEORIGINAL StringTable[3] #define IDS_NGFUNCTION StringTable[4] #define IDS_NGGROUPING StringTable[5] #define IDS_NGSTRENGTHCOLOR StringTable[6] #define IDS_NGRUNGROUPING StringTable[7] #define IDS_NGWORKAREA StringTable[8] #define IDS_NGSHAPE StringTable[9] #define IDS_NGCANCEL StringTable[10] #define IDS_NGIRREGULAR StringTable[11] #define IDS_NGOFF StringTable[12] #define IDS_NGCURVED StringTable[13] #define IDS_NGDELETEPL StringTable[14] #define IDS_NGCLOSE StringTable[15] #define IDS_NGSET StringTable[16] #define IDS_NGADDITION StringTable[17] #define IDS_NGSUBTRACTION StringTable[18] #define IDS_NGSIZE StringTable[19] #define IDS_NGSQUARE StringTable[20] #define IDS_NGRECTANGLE StringTable[21] #define IDS_NGCIRCLE StringTable[22] #define IDS_NGELLIPSE StringTable[23] #define IDS_NGCOLORCHANGE StringTable[24] #define IDS_NGBYPEN StringTable[25] #define IDS_NGBYWINDOW StringTable[26] #define IDS_NGSINGLETOSINGLE StringTable[27] #define IDS_NGMULTYTOSINGLE StringTable[28] #define IDS_NGSOURCE StringTable[29] #define IDS_NGTARGET StringTable[30] #define IDS_NGPENSIZE StringTable[31] #define IDS_NGFILTERING StringTable[32] #define IDS_NGFILTERSIZE StringTable[33] #define IDS_NGFILTERRUN StringTable[34] #define IDS_NGHLAFTONE StringTable[35] #define IDS_NGMORESPREAD StringTable[36] #define IDS_NGRUNHALFTONE StringTable[37] #define IDS_NGCOLORINIMAGE StringTable[38] #define IDS_NGFINISH256 StringTable[39] #define IDS_NGFINISHFULLCOLOR StringTable[40] #define IDS_NGBLUR StringTable[41] #define IDS_NGUNDO StringTable[42] #define IDS_NGREDO StringTable[43] #define IDS_MSGBOXALLBTN StringTable[44] #define IDS_MSGBOXFILTER StringTable[45] //---------------------------------------------2004/03/03 Update------------- #define IDS_NGFILTERPIXELSIZE StringTable[46] #define IDS_NGFILTERNOOSEBTN StringTable[47] #define IDS_NGFILTERBIGSCALE StringTable[48] #define IDS_NGFILTEROUTLINE StringTable[49] #define IDS_NGFILTERORGANIZATION StringTable[50] #define IDS_NGFILTERUSINGPEN StringTable[51] #define IDS_RETURNPREVIEWBTN StringTable[52] #define IDS_NGNEW StringTable[53] #define IDS_NGALL StringTable[54] #define IDS_NGBEFORECOLOR StringTable[55] #define IDS_NGBLOCKCOLOR StringTable[56] #define IDS_NGINSERTCOLOR StringTable[57] #define IDS_NGONECOLOR StringTable[58] #define IDS_NGDELETECOLOR StringTable[59] #define IDS_NGFILTERPENSIZE StringTable[60] #define IDS_MSGBOXFILTERBIGSCALE StringTable[61] #define IDS_NGMSGBOXUNDO StringTable[62] #define IDS_NGMSGBOXREDO StringTable[63] #define IDS_NGWAFULLBTN StringTable[64] #define IDS_NGWAINVERTBTN StringTable[65] #define IDS_NGCLOSEMSGBOX StringTable[66] //--------------------------------------------------------------------------- TNewGroupingForm *NewGroupingForm; //--------------------------------------------------------------------------- __fastcall TNewGroupingForm::TNewGroupingForm(TComponent* Owner) : TForm(Owner) { //=================================================================== StringTable.Create(DirectoryItem, Language, "NewGrouping"); SetSmallFont(Font); gbZoom->Caption = IDS_NGZOOM; gbImageSelect->Caption = IDS_NGIMAGE; RadioImage->Caption = IDS_NGIMAGEIMAGE; RadioOriginal->Caption = IDS_NGIMAGEORIGINAL; gbFunction->Caption = IDS_NGFUNCTION; blurButton->Hint = IDS_NGBLUR; sbInitGrouping->Hint = IDS_NGGROUPING; sbGrouping->Caption = IDS_NGRUNGROUPING; workAreaBitBtn->Hint = IDS_NGWORKAREA; sbShape->Caption = IDS_NGSHAPE; cancelButton->Caption = IDS_NGCANCEL; sbIrregular->Caption = IDS_NGIRREGULAR; sbOff->Caption = IDS_NGOFF; cbIrreCurve->Caption = IDS_NGCURVED; sbIrreDelete->Caption = IDS_NGDELETEPL; closeButton->Caption = IDS_NGCLOSE; rbSet->Caption = IDS_NGSET; rbAddition->Caption = IDS_NGADDITION; rbSubtraction->Caption = IDS_NGSUBTRACTION; lbShape->Caption = IDS_NGSIZE; sbShapeSquare->Caption = IDS_NGSQUARE; sbShapeRectangle->Caption = IDS_NGRECTANGLE; sbShapeCircle->Caption = IDS_NGCIRCLE; sbShapeEllipse->Caption = IDS_NGELLIPSE; colorChangeBtn->Hint = IDS_NGCOLORCHANGE; PenTabSheet->Caption = IDS_NGBYPEN; pen_sTOsBtn->Caption = IDS_NGSINGLETOSINGLE; pen_mTOsBtn->Caption = IDS_NGMULTYTOSINGLE; sSourceBtn->Caption = IDS_NGSOURCE; sTargetBtn->Caption = IDS_NGTARGET; Label1->Caption = IDS_NGPENSIZE; mSourceBtn->Caption = IDS_NGSOURCE; mTargetBtn->Caption = IDS_NGTARGET; IrregularTabSheet->Caption= IDS_NGBYWINDOW; irregular_sTOsBtn->Caption= IDS_NGSINGLETOSINGLE; irregular_mTOsBtn->Caption= IDS_NGMULTYTOSINGLE; sSIrregularRadio->Caption = IDS_NGSOURCE; sTIrregularRadio->Caption = IDS_NGTARGET; mSIrregularRadio->Caption = IDS_NGSOURCE; mTIrregularRadio->Caption = IDS_NGTARGET; fileteringButton->Hint = IDS_NGFILTERING; filterRunBtn->Caption = IDS_NGFILTERRUN; filterRunBtn1->Caption = IDS_NGFILTERRUN; nooseBtn->Hint = IDS_NGFILTERNOOSEBTN; nooseBtn1->Hint = IDS_NGFILTERNOOSEBTN; filterBigScaleBtn->Caption = IDS_NGFILTERBIGSCALE; EraseOutLineBtn->Caption = IDS_NGFILTEROUTLINE; EraseOrganizationBtn->Caption = IDS_NGFILTERORGANIZATION; UsingPenRemoveBtn->Caption = IDS_NGFILTERUSINGPEN; sbInitHalftone->Hint = IDS_NGHLAFTONE; lbSpread->Caption = IDS_NGMORESPREAD; sbHalftone->Caption = IDS_NGRUNHALFTONE; Label2->Caption = IDS_NGCOLORINIMAGE; BtnFinish256->Caption = IDS_NGFINISH256; BtnFinish->Caption = IDS_NGFINISHFULLCOLOR; UndoBtn->Hint = IDS_NGUNDO; RedoBtn->Hint = IDS_NGREDO; returnPreviewBtn->Hint = IDS_RETURNPREVIEWBTN; penAllBtn->Hint = IDS_NGALL; irregularAllBtn->Hint = IDS_NGALL; filterColorAllBtn->Hint = IDS_NGALL; penClearBtn->Hint = IDS_NGNEW; irregularClearlBtn->Hint = IDS_NGNEW; filterColorClearBtn->Hint = IDS_NGNEW; penBlockBtn->Hint = IDS_NGBLOCKCOLOR; penInsertBtn->Hint = IDS_NGINSERTCOLOR; irregularBlockBtn->Hint = IDS_NGBLOCKCOLOR; irregularInsertBtn->Hint = IDS_NGINSERTCOLOR; filterColorBlockBtn->Hint = IDS_NGBLOCKCOLOR; filterColorInsertBtn->Hint = IDS_NGINSERTCOLOR; penLastBtn->Hint = IDS_NGBEFORECOLOR; irregularLastBtn->Hint = IDS_NGBEFORECOLOR; filterColorLastBtn->Hint = IDS_NGBEFORECOLOR; groupingLastBtn->Hint = IDS_NGBEFORECOLOR; gbClearlBtn->Hint = IDS_NGNEW; sbFullBtn->Caption = IDS_NGWAFULLBTN; sbInvertBtn->Caption = IDS_NGWAINVERTBTN; //=================================================================== Image->OnPaintDirectly=PaintDirectly; this->Left = 0; this->Top = 0; SelectColorListAdd = false; isDrawingRegion = false; isFirst = true; freedraw = false; originalBitmap = NULL; blurBitmap = NULL; previewBitmap = NULL; tempBitmap = NULL; sourceColor = NULL; targetColor = NULL; wantedColorClick = false; // color in image¿¡ ÀÖ´Â »öÀ» ´­·¶´ÂÁö ¾Æ´ÑÁö¸¦ È®ÀÎÇϱâ À§Çؼ­ afterGrouping = false; existBluredImage = false; color_In_target = false; FirstPointClick = false; // »öÀ» ¼±ÅÃÇϱâ À§Çؼ­ ÀÛ¾÷±¸¿ªÀ» ÀâÀ» ¶§ ù¹øÂ° Á¡À» // Âï¾ú´ÂÁö È®ÀÎÇϱâ À§ÇÑ º¯¼ö msx = NULL; memsize = 0; hMemLine = NULL; NewGroupingStart = false; ColorCount = 0; colorSelectionArea = Rect(-1,-1,-1,-1); FilterColorList = new TList; FilterShapeList = new TList; backupFilterColorList = new TList; PenColorList = new TList; PenShapeList = new TList; backupPenColorList = new TList; IrregularColorList = new TList; IrregularShapeList = new TList; backupIrregularColorList = new TList; GroupingColorList = new TList; GroupingShapeList = new TList; GroupingColorNum = new TList; backupGroupingColorList = new TList; HalftoneColorList = new TList; HalftoneShapeList = new TList; AfterGroupingColorList = new TList; AfterGroupingShapeList = new TList; AfterBgGroupingShapeList = new TList; PointList = new TList; WorkArea = new TPWorkArea(&(Image->uBitmap)); isPaintDirectlyClean=false; filetrCounter=0; penCounter=0; irregularCounter=0; groupingCounter=0; RedoBtnEnabled = false; UndoBtnEnabled = false; bClose = false; } //--------------------------------------------------------------------------- __fastcall TNewGroupingForm::~TNewGroupingForm() { // delete WorkArea->Mask; // delete newgroupingUndo; if (FilterColorList) { delete FilterColorList; } if (FilterShapeList) { delete FilterShapeList; } if (backupFilterColorList) { delete backupFilterColorList; } if (PenColorList) { delete PenColorList; } if (PenShapeList) { delete PenShapeList; } if (backupPenColorList) { delete backupPenColorList; } if (IrregularColorList) { delete IrregularColorList; } if (IrregularShapeList) { delete IrregularShapeList; } if (backupIrregularColorList) { delete backupIrregularColorList; } if (GroupingColorList) { delete GroupingColorList; } if (GroupingShapeList) { delete GroupingShapeList; } if (GroupingColorNum) { delete GroupingColorNum; } if (backupGroupingColorList) { delete backupGroupingColorList; } if (HalftoneColorList) { delete HalftoneColorList; } if (HalftoneShapeList) { delete HalftoneShapeList; } if (AfterGroupingColorList) { delete AfterGroupingColorList; } if (AfterGroupingShapeList) { delete AfterGroupingShapeList; } if (AfterBgGroupingShapeList) { delete AfterBgGroupingShapeList; } if (PointList) { delete PointList; } } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::FormCreate(TObject *Sender) { tbDiffusionLoss->Position = 10.0-diffusion_loss*10.0+0.5; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::InitForm() { BEGIN_LOG("::"); TCursor cur; cur = Screen->Cursor; Screen->Cursor = crHourGlass; initBitmaps(); // by celberus ColorCount++; NewGroupingStart = true; isDragImage = false; Image->Align=alClient; Top = 0; Left = 0; if (Parent){ Width = Parent->ClientWidth - PaletteForm->Width - 3; Height = Parent->ClientHeight - 45; } else { Width = GetSystemMetrics(SM_CXSCREEN); // Height = GetSystemMetrics(SM_CYSCREEN) - GetSystemMetrics(SM_CYCAPTION) - 50; // Full ScreenÀ¸·Î ½ÇÇà ¾ÈµÇ´Â ¹®Á¦ ¶§¹®¿¡.. by celberus WindowState = wsMaximized; } initFunctionMenu(); // n loadBackupColorList(backupFilterColorList, "backupFilterColorList.tmp"); loadBackupColorList(backupPenColorList, "backupPenColorList.tmp"); loadBackupColorList(backupIrregularColorList, "backupIrregularColorList.tmp"); loadBackupColorList(backupGroupingColorList, "backupGroupingColorList.tmp"); Screen->Cursor = cur; //////////// for ImageViewer 2004. 6. 25 /* NewGroupingViewForm = new TNewGroupingViewForm(this); NewGroupingViewForm->Parent = this; NewGroupingViewForm->Visible = false; NewGroupingViewForm->InitForm(previewBitmap);*/ END_LOG; } //--------------------------------------------------------------------------- bool __fastcall TNewGroupingForm::ExitForm(bool check) { if (check && !bClose) { //bool bClose=false; FormCloseQuery(this, bClose); if (!bClose) { return false; } } saveBackupColorList(backupFilterColorList, "backupFilterColorList.tmp", filetrCounter); saveBackupColorList(backupPenColorList, "backupPenColorList.tmp", penCounter); saveBackupColorList(backupIrregularColorList, "backupIrregularColorList.tmp", irregularCounter); saveBackupColorList(backupGroupingColorList, "backupGroupingColorList.tmp", groupingCounter); ResetShape(FilterColorList, FilterShapeList); ResetShape(PenColorList, PenShapeList); ResetShape(IrregularColorList, IrregularShapeList); ResetShape(GroupingColorList, GroupingShapeList); ResetShape(HalftoneColorList, HalftoneShapeList); ResetBackupList(backupFilterColorList); ResetBackupList(backupPenColorList); ResetBackupList(backupIrregularColorList); ResetBackupList(backupGroupingColorList); ResetShape(AfterGroupingColorList, AfterGroupingShapeList); ResetBgShape(AfterBgGroupingShapeList); ResetGroupingColorLabel(GroupingColorNum); // ResetBitmapRegion(); //by maxleo21c 05.07.22 ÁÖ¼®Ã³¸® ÇÊ¿ä¾ø´Â°Í °°¾Æ¼­ deleteBitmaps(); Step = 0; //////////// for ImageViewer 2004. 6. 25 /* NewGroupingViewForm->ExitForm(); delete NewGroupingViewForm; NewGroupingViewForm = NULL;*/ return true; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::FormClose(TObject *Sender, TCloseAction &Action) { if (Action) { hWnd=((TWinControl *)Owner)->Handle; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); } } //--------------------------------------------------------------------------- // ¸¶Áö¸·¿¡ »ç¿ëÇß´ø »öÀ» ÀúÀåÇÏ´Â ¸®½ºÆ®ÀÇ Ä÷¯¸¦ ÆÄÀÏ·Î ÀúÀåÇÏ´Â ºÎºÐÀÌ´Ù. void __fastcall TNewGroupingForm::saveBackupColorList(TList *ListOfBackup, String fileName, int counter) { BEGIN_LOG("::"); bool howReturn=false; if (counter<1) howReturn=true; // lastBtnÀ» Çѹøµµ ¾È´­·¶À¸¸é ´Ù½Ã ÀúÀåÇÏÁö ¾Ê´Â´Ù. else howReturn=false; if (ListOfBackup->Count<1 && howReturn) howReturn=true; else howReturn=false; if (howReturn) { END_LOG; return; // lastBtnÀ» ´­·¶Áö¸¸ ¸®½ºÆ®¿¡ Ä÷¯°¡ ¾ø´Ù¸é ¸®ÅÏÇÑ´Ù. } // ÇöÀç ÀúÀåµÈ È­ÀÏ¿¡ ÀúÀåÇÒ Çʿ䰡 ¾ø±â ¶§¹®ÀÌ´Ù. FILE *fp; TRegIniFile *RegIniFile = NULL; unsigned long items_red = 0, items_green = 0, items_blue = 0; #ifndef LOCK_USB String DirectoryBin; RegIniFile = new TRegIniFile(RegFilename); RegIniFile->RootKey = HKEY_LOCAL_MACHINE; RegIniFile->OpenKey(RegFilename + "\\",true); // yw DirectoryBin = RegIniFile->ReadString("Directory", "Bin", DefaultDir + "\\Bin"); #endif fp=_wfopen((DirectoryBin+"\\TexStylist\\"+fileName).c_str(), L"w"); fwprintf(fp, L"%d\n", ListOfBackup->Count); for (int i=0; iCount; i++) { items_red = (*(TColor*)(ListOfBackup->Items[i])) & 0xFF; items_green = (*((TColor*)(ListOfBackup->Items[i])) >> 8) & 0xFF; items_blue = (*((TColor*)(ListOfBackup->Items[i])) >> 16) & 0xFF; fprintf(fp, "%lu %lu %lu\n", items_blue, items_green, items_red); items_red = 0; items_green = 0; items_blue = 0; } fclose(fp); END_LOG; } //--------------------------------------------------------------------------- // ÀúÀåµÈ »öÀ» ¸®½ºÆ®¿¡ º¹»çÇÏ´Â ºÎºÐÀÌ´Ù. void __fastcall TNewGroupingForm::loadBackupColorList(TList *ListOfBackup, String fileName) { BEGIN_LOG("::"); FILE *fp; TRegIniFile *RegIniFile; int listCount; unsigned long items_red = 0, items_green = 0, items_blue = 0; String strFileName; #ifndef LOCK_USB String DirectoryBin; RegIniFile = new TRegIniFile(RegFilename); RegIniFile->RootKey = HKEY_LOCAL_MACHINE; RegIniFile->OpenKey(RegFilename + "\\",true); // yw DirectoryBin = RegIniFile->ReadString("Directory", "Bin", DefaultDir + "\\Bin"); #endif strFileName = DirectoryBin+"\\TexStylist\\"+fileName; // ÆÄÀÏÀÌ ÀÖÀ» °æ¿ì¸¸ ¿­µµ·Ï ¼öÁ¤ - by monkman (2010.05.04) if (FileExists(strFileName)) { if ((fp=_wfopen(strFileName.c_str() , L"r")) != NULL) { fwscanf(fp, L"%d", &listCount); for (int i=0; iAdd(cp); } fclose(fp); } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initBitmaps() { BEGIN_LOG("::"); int w, h; TRect Src = Rect(0, 0, 0, 0); if (MainImageForm->WorkArea->Mask) { Src = MainImageForm->WorkArea->Range; w = Src.Right-Src.Left; h = Src.Bottom-Src.Top; }else { w = MainImageForm->iMainImage->uBitmap->Width; h = MainImageForm->iMainImage->uBitmap->Height; } try { // originalBitmap = Image->uBitmap; if ((originalBitmap = new TUnionBitmap)==NULL) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } if (!originalBitmap->Create(w, h, 24)) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } originalBitmap->CopyFromRect(MainImageForm->iMainImage->uBitmap, Src.left, Src.top, SRCCOPY); if ((blurBitmap = new TUnionBitmap)==NULL) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } if (!blurBitmap->Create(w, h, 24)) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } if ((tempBitmap = new TUnionBitmap)==NULL) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } if (!tempBitmap->Create(w, h, 24)) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } if ((gStatusProgress = new TStatusProgress(gbStatusBar, 4))==NULL) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } if (!previewBitmap) { if ((previewBitmap = new TUnionBitmap)==NULL) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } if (!previewBitmap->Create(w, h, 24)) { SAVE_EXCEPTION(EC_MEMORY_LACK); throw EC_MEMORY_LACK; } previewBitmap->Copy(originalBitmap, SRCCOPY); } Image->uBitmap = previewBitmap; newgroupingUndo = new NewGrouingUndo(blurBitmap, previewBitmap, tempBitmap, WorkArea); // redo/undo »ý¼º } catch(TPException ec) { if (originalBitmap != NULL) { originalBitmap->Destroy(); } if (blurBitmap != NULL) { blurBitmap->Destroy(); } if (tempBitmap != NULL) { tempBitmap->Destroy(); } if (previewBitmap != NULL) { delete previewBitmap; previewBitmap = NULL; } doDestroy(gStatusProgress) EXCEPTION_MESSAGE_OK(ec); /* TODO : exception ó¸® Á¦´ë·Î ÇÒ°Í */ } AllocLineMem(h); /* TODO : µû·Î »¬°Í */ updateImage(); Image->Repaint(); //------------------------------------------------------------------------ // StatusBar¿¡ Á¤º¸¸¦ ³Ö´Â ºÎºÐ gbStatusBar->Panels->Items[0]->Text = " Size : " + MainImageForm->CanvasInfor.Name(MainImageForm->CurrentUnit, w, h); gbStatusBar->Panels->Items[1]->Text = Format("DPI : %d", OPENARRAY(TVarRec, (MainImageForm->CanvasInfor.DotsPerInch))); gbStatusBar->Panels->Items[2]->Text = "Zoom : 1"; //------------------------------------------------------------------------ END_LOG; return; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::deleteBitmaps() { BEGIN_LOG("::"); if(blurBitmap){ delete blurBitmap; blurBitmap = NULL; } if(tempBitmap){ delete tempBitmap; tempBitmap = NULL; } if(originalBitmap){ delete originalBitmap; originalBitmap = NULL; } if(previewBitmap){ delete previewBitmap; previewBitmap = NULL; } // Image->uBitmap = originalBitmap; // originalBitmap Àº ~TPLayerImage¿¡¼­ Áö¿öÁØ´Ù. END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RadioImageClick(TObject *Sender) { BEGIN_LOG("::"); sbExit->Visible=false; initImageChange(); // ´ÝÇô¾ß ÇÒ ¸Þ´º ÄÁÆ®·Ñ END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RadioOriginalClick(TObject *Sender) { BEGIN_LOG("::"); sbExit->Visible=false; Image->uBitmap = originalBitmap; // by celberus Image->isRepaintAll = true; Image->Repaint(); initImageChange(); // ´ÝÇô¾ß ÇÒ ¸Þ´º ÄÁÆ®·Ñ END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ImageMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { BEGIN_LOG("::"); RECT r, gr; bool sw, One; bool undoSw = false; int i, j, ix, iy; int rgb[3][256]; TUnionBitmap *tb; Byte *bp; Byte temp_red = 0, temp_green = 0, temp_blue = 0, total_pixel = 0; COLORREF color; memset(rgb, 0, 3*256*4); PaintDirectly(Image->Canvas->Handle,Image->Parent->Left,Image->Parent->Top, Image->Parent->Width,Image->Parent->Height); isPaintDirectlyClean=true; if(NewGroupingStart == false) { END_LOG; return; } if (X>=0 && XuBitmap->Width && Y>=0 && YuBitmap->Height) { if (Shift.Contains(ssCtrl) && Button==mbLeft) { isDragImage = true; Image->Cursor = crHandPoint; dragPointStart = Point(X, Y); } else if (Button==mbRight) { if (AfterGroupingColorList->Count<1) { END_LOG; return; } if (wantedColorClick) { if ((TColor)Image->uBitmap->GetPixelColor(X, Y) == 0xFFFFFF) { END_LOG; return; } for(int i=0; iCount; i++) { if ( ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color != clBlue) { if ( ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color == clRed) ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clBlue; else ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clWhite; } } } else { for(int i=0; iCount; i++) { ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clWhite; ((TShape *)AfterBgGroupingShapeList->Items[i])->Pen->Color = clBlack; } } for(int i=0; iCount; i++) { if ( *(TColor *)AfterGroupingColorList->Items[i] == (TColor)Image->uBitmap->GetPixelColor(X, Y) ) { ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clRed; ((TShape *)AfterBgGroupingShapeList->Items[i])->Pen->Color = clBlack; END_LOG; return; } } } else if (Button==mbMiddle || (Shift.Contains(ssShift) && Button==mbLeft)) { switch(functionMenu.getCurrentFunction()) { case FUNC_NONE: case FUNC_BLUR: Screen->Cursor=crArrow; break; case FUNC_GROUPING: colorSelectionArea.left = X; colorSelectionArea.top = Y; FirstPointClick=true; break; case FUNC_CHANGECOLOR: if (FirstPointClick==false) FirstPointClick=ColorChangeFirstBtnClick(X, Y); else { ColorChangeSecondBtnClick(X, Y); FirstPointClick=false; } break; case FUNC_FILTERING: if (EraseOrganizationBtn->Down) { END_LOG; return; // »ö ¼±ÅÃÀÌ ÇÊ¿ä¾ø´Ù. } if (filterColorBlockBtn->Down) FirstPointClick=true; if (!FirstPointClick) { // FirstPorintClick´Â ÀÛ¾÷±¸¿ª³» »öÀ» ¼±ÅÃÇÒ ¶§ colorSelectionArea.left = X; // ù¹øÂ°Á¡(»ç°¢ÇüÀÇ ¿ÞÂÊ À§ÀÇ Á¡)ÀÌ ´­·¶´ÂÁö È®ÀÎ colorSelectionArea.top = Y; FirstPointClick=true; } else { ColorChangeSecondBtnClick(X, Y); FirstPointClick=false; } break; case FUNC_HALFTONE: TColor *cp = new TColor; *cp = (TColor)(Image->uBitmap->GetPixelColor(X, Y)); groupingAddShapeList(cp, HalftoneColorList, HalftoneShapeList); break; } //¿©±â±îÁö switch¹® } else if(Button==mbLeft) { switch(functionMenu.getCurrentFunction()) { case FUNC_NONE: case FUNC_BLUR: Screen->Cursor=crArrow; break; case FUNC_CHANGECOLOR: if (ColorChangeControl->ActivePage == PenTabSheet && color_In_target ) { if (pen_sTOsBtn->Down) { newgroupingUndo->do_(UT_CCPEN, 0); UndoBtn->Enabled = true; SpecialMouseDown(X, Y); } else if (pen_mTOsBtn->Down && PenColorList->Count > 0) { //-ÇöÀç ÆÈ·¹Æ®¿¡ ÀÖ´Â »öÀ» ÀúÀåÇÑ´Ù.--------- if (PenColorList->Count>0) { ResetBackupList(backupPenColorList); ReplaceColorListTOBackup(PenColorList, backupPenColorList); } //------------------------------------------- newgroupingUndo->do_(UT_CCPEN, 0); UndoBtn->Enabled = true; SpecialMouseDown(X, Y); } } break; case FUNC_WORKAREA: switch (Item) { case NG_SHAPE: RectangleMouseDown(Button, X, Y); break; case NG_IRREGULAR: IrregularMouseDown(Button, X, Y); break; } break; case FUNC_FILTERING: if (nooseBtn->Down && EraseOutLineBtn->Down) { if (FilterColorList->Count == 1) { IrregularMouseDown(Button, X, Y); } else { Screen->Cursor=crArrow; Application->MessageBox(IDS_MSGBOXFILTER.c_str(), L"Information", MB_OK); } } else if (nooseBtn1->Down && EraseOrganizationBtn->Down) IrregularMouseDown(Button, X, Y); else if (UsingPenRemoveBtn->Down && !nooseBtn->Down) { if (FilterColorList->Count == 1) { if (wantedColorClick) { newgroupingUndo->do_(UT_FILTER, 1); UndoBtn->Enabled = true; } else { newgroupingUndo->do_(UT_FILTER, 0); UndoBtn->Enabled = true; } SpecialMouseDown(X, Y); } else { Screen->Cursor=crArrow; Application->MessageBox(IDS_MSGBOXFILTER.c_str(), L"Information", MB_OK); END_LOG; return; } } else if ( (nooseBtn->Down || nooseBtn1->Down) && filterBigScaleBtn->Down ) { if (FilterColorList->Count > 0) { IrregularMouseDown(Button, X, Y); } else { Screen->Cursor=crArrow; Application->MessageBox(IDS_MSGBOXFILTERBIGSCALE.c_str(), L"Information", MB_OK); } } break; } // ¿©±â±îÁö switch¹® } // ¿©±â±îÁö left ¹öư } // ¿©±â±îÁö À̹ÌÁö ¹üÀ§ ¾È¿¡¼­¸¸ ¹öưÀÌ ÀÛµ¿ÇÏ°Ô Çϱâ À§ÇÑ iF¹® isPaintDirectlyClean=false; PaintDirectly(Image->Canvas->Handle,Image->Parent->Left,Image->Parent->Top, Image->Parent->Width,Image->Parent->Height); END_LOG; return; fail: EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ImageMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { BEGIN_LOG("::"); if (X >= 0 && X uBitmap->Width && Y >= 0 && Y uBitmap->Height) { PaintDirectly(Image->Canvas->Handle,Image->Parent->Left,Image->Parent->Top, Image->Parent->Width,Image->Parent->Height); isPaintDirectlyClean=true; isFirst=false; Pen.x=Image->BitmapToCanvasX(X);Pen.y=Image->BitmapToCanvasY(Y); // StatusBar¿¡ Á¤º¸¸¦ ³Ö´Â ºÎºÐ gbStatusBar->Panels->Items[3]->Text = IntToStr((int)Pen.x) + " : " + IntToStr((int)Pen.y); if (Shift.Contains(ssCtrl)) { END_LOG; return; // CtrlÀº dragÇÒ¶§¿¡ »ç¿ëµÈ´Ù } switch(functionMenu.getCurrentFunction()) { case FUNC_NONE: case FUNC_BLUR: case FUNC_UNDO: case FUNC_REDO: Screen->Cursor=crArrow; break; case FUNC_CHANGECOLOR: if (ColorChangeControl->ActivePage == PenTabSheet) { Screen->Cursor=crNone; if ( Shift.Contains(ssLeft) && color_In_target) SpecialMouseMove(Shift, X, Y); else if ( FirstPointClick && colorSelectionArea.left!=-1) { if (!color_In_target) { colorSelectionArea.right = X; colorSelectionArea.bottom = Y; NewGroupingDrawRectangleLocate(colorSelectionArea); } } // else fi ±îÁö } // ¿©±â±îÁö PenTabSheet else if (ColorChangeControl->ActivePage == IrregularTabSheet) { // by maxleo21c Screen->Cursor=crCross; if (colorSelectionArea.left!=-1 && !color_In_target && FirstPointClick) { colorSelectionArea.right = X; colorSelectionArea.bottom = Y; NewGroupingDrawRectangleLocate(colorSelectionArea); } } // ¿©±â±îÁö IrregularTabSheet break; case FUNC_FILTERING: if ( Shift.Contains(ssLeft) ) { if ( (nooseBtn->Down || nooseBtn1->Down) && (EraseOrganizationBtn->Down || EraseOutLineBtn->Down || filterBigScaleBtn->Down ) ) IrregularMouseMove(Shift, X, Y); else if (UsingPenRemoveBtn->Down && !nooseBtn->Down) { if (FilterColorList->Count == 1) { Screen->Cursor=crNone; SpecialMouseMove(Shift, X, Y); } else Screen->Cursor=crArrow; } } else { if (EraseOrganizationBtn->Down) { END_LOG; return; } if (UsingPenRemoveBtn->Down) Screen->Cursor=crNone; else Screen->Cursor=crCross; if (FirstPointClick && !filterColorBlockBtn->Down) { colorSelectionArea.right = X; colorSelectionArea.bottom = Y; NewGroupingDrawRectangleLocate(colorSelectionArea); } } break; case FUNC_GROUPING: Screen->Cursor=crCross; if(colorSelectionArea.left!=-1){ colorSelectionArea.right = X; colorSelectionArea.bottom = Y; NewGroupingDrawRectangleLocate(colorSelectionArea); } break; case FUNC_WORKAREA: Screen->Cursor=crCross; switch (Item) { case NG_SHAPE: RectangleMouseMove(X, Y); break; case NG_IRREGULAR: IrregularMouseMove(Shift, X, Y); break; } break; case FUNC_HALFTONE: Screen->Cursor=crCross; break; } // ¿©±â±îÁö switch¹® isPaintDirectlyClean=false; PaintDirectly(Image->Canvas->Handle,Image->Parent->Left,Image->Parent->Top, Image->Parent->Width,Image->Parent->Height); } // ¿©±â±îÁö À̹ÌÁö ¾È¿¡¼­¸¸ ¸¶¿ì½ºMove°¡ ÀÛµ¿Çϵµ·Ï ÇÏ´Â if¹®ÀÌ´Ù. else { isFirst=true; Screen->Cursor=crArrow; //if (!wantedColorClick ) { Image->Repaint(); //wantedColorClick=false; //} } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ImageMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { BEGIN_LOG("::"); PaintDirectly(Image->Canvas->Handle,Image->Parent->Left,Image->Parent->Top, Image->Parent->Width,Image->Parent->Height); isPaintDirectlyClean=true; if (X>=0 && XuBitmap->Width && Y>=0 && YuBitmap->Height) { if (isDragImage) { dragPointEnd = Point(X, Y); Image->SetPosition(Image->PositionX-(dragPointEnd.x - dragPointStart.x), Image->PositionY-(dragPointEnd.y - dragPointStart.y)); isDragImage = false; } if(freedraw){ freedraw = false; isDrawingRegion = false; } else if (Button==mbMiddle || (Shift.Contains(ssShift) && Button==mbLeft)) { if (functionMenu.getCurrentFunction() == FUNC_GROUPING) { colorSelectionArea.right = X; colorSelectionArea.bottom = Y; if(colorSelectionArea.left!=-1){ TColor *cp = new TColor; *cp = (TColor)getAverageColor(colorSelectionArea); groupingAddShapeList(cp, GroupingColorList, GroupingShapeList, GroupingColorNum); // modify by maxleo21c } colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick=false; } } else if (Button==mbLeft) { if (functionMenu.getCurrentFunction() == FUNC_FILTERING) { if (wantedColorClick && (nooseBtn->Down || nooseBtn1->Down) && PointList->Count>2) { // WorkArea¸¦ ´Ý´Â ºÎºÐ---- SetBitmapRegion(); WADraw(-2); ResetPointList(); Step = 0; //------------------------- if ( !WorkArea->Mask ) { ResetBitmapRegion(); END_LOG; return; }// WorkArea°¡ ¾øÀ¸¸é ReturnÇÑ´Ù. newgroupingUndo->do_(UT_FILTER, 1); UndoBtn->Enabled = true; if (EraseOrganizationBtn->Down) EraseOrganizationWA(tempBitmap, GroupingColorList, WorkArea, gStatusProgress); else if (EraseOutLineBtn->Down) EraseOutLineWA(tempBitmap, GroupingColorList, (TColor *)FilterColorList->Items[0], WorkArea); else if (filterBigScaleBtn->Down) LabelingFilter(tempBitmap, FilterColorList, AfterGroupingColorList, RxSpinEdit1->Value, gStatusProgress, WorkArea); ResetBitmapRegion(); // WorkArea Off wantedColorSpeedBtnClick(true); } else if ( (nooseBtn->Down || nooseBtn1->Down) && PointList->Count>2) { // WorkArea¸¦ ´Ý´Â ºÎºÐ---- SetBitmapRegion(); WADraw(-2); ResetPointList(); Step = 0; //------------------------- if ( !WorkArea->Mask ) { ResetBitmapRegion(); END_LOG; return; }// WorkArea°¡ ¾øÀ¸¸é ReturnÇÑ´Ù. newgroupingUndo->do_(UT_FILTER, 0); UndoBtn->Enabled = true; if (EraseOrganizationBtn->Down) EraseOrganizationWA(previewBitmap, GroupingColorList, WorkArea, gStatusProgress); else if (EraseOutLineBtn->Down) EraseOutLineWA(previewBitmap, GroupingColorList, (TColor *)FilterColorList->Items[0], WorkArea); else if (filterBigScaleBtn->Down) LabelingFilter(previewBitmap, FilterColorList, AfterGroupingColorList, RxSpinEdit1->Value, gStatusProgress, WorkArea); ResetBitmapRegion(); // WorkArea Off Image->Repaint(); } //-ÇöÀç ÆÈ·¹Æ®¿¡ ÀÖ´Â »öÀ» ÀúÀåÇÑ´Ù.--------------------------------------- if (FilterColorList->Count>0) { ResetBackupList(backupFilterColorList); ReplaceColorListTOBackup(FilterColorList, backupFilterColorList); } } // ¿©±â±îÁö ÇÊÅ͸µ } // ¿©±â±îÁö left } // À̹ÌÁö ¾È¿¡¼­¸¸ ¸¶¿ì½º À̺¥Æ®°¡ ÀϾ±â À§ÇÑ ¸ÇóÀ½ if¹® isPaintDirectlyClean=false; PaintDirectly(Image->Canvas->Handle,Image->Parent->Left,Image->Parent->Top, Image->Parent->Width,Image->Parent->Height); END_LOG; } //--------------------------------------------------------------------------- // Color Change Pen, irregular or Filter // »öÀ» ¼±ÅÃÇϱâ À§Çؼ­, ¼±ÅÃÇÑ »öÀ» ó¸®Çϱâ À§Çؼ­ »ç¿ëµÈ´Ù. // MouseDownÇÔ¼ö°¡ Ä¿Áö´Â °ÍÀ» ¸·±â À§Çؼ­ ÇÔ¼ö¸¦ ±¸ÇöÇß´Ù. // ±¸¿ªÀ» ÅëÇØ¼­ »öÀ» ¼±ÅÃÇÏ´Â ¹æ¹ýÀÌ Àֱ⠶§¹®¿¡ FirstBtnClick, SecondBtnClick // µÎ ÇÔ¼ö°¡ Á¸ÀçÇÑ´Ù. °£´ÜÇÑ ¹æ¹ýÀ̱⠶§¹®¿¡ ÇÔ¼ö¸¦ º¸¸é ½±°Ô ¾Ë ¼ö ÀÖ´Ù. int __fastcall TNewGroupingForm::ColorChangeFirstBtnClick(int X, int Y) { BEGIN_LOG("::"); TColor colorChoice; colorChoice = (TColor)(Image->uBitmap->GetPixelColor(X, Y)); if (ColorChangeControl->ActivePage == PenTabSheet) { if (pen_sTOsBtn->Down) { if (sSourceBtn->Checked) { sSourceShape->Parent = singleColorPanel; sSourceShape->Brush->Color = colorChoice; sourceColor=colorChoice; sSourceBtn->Checked=false; sTargetBtn->Checked=true; color_In_target=0; } else if (sTargetBtn->Checked) { sTargetShape->Parent = singleColorPanel; sTargetShape->Brush->Color = colorChoice; targetColor=colorChoice; sSourceBtn->Checked=true; sTargetBtn->Checked=false; color_In_target=1; } END_LOG; return false; // s to s À̸é false¸¦ ¸®ÅÏÇÑ´Ù. } else if (pen_mTOsBtn->Down) { if(mSourceBtn->Checked ) { if(penBlockBtn->Down) { colorSelectionArea.left = X; colorSelectionArea.top = Y; colorSelectionArea.right = X+1; colorSelectionArea.bottom = Y+1; if (penInsertBtn->Down) multiChangeDelColor(colorSelectionArea, PenColorList, PenShapeList); else multiChangeGetColor(colorSelectionArea, PenColorList, PenShapeList); colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); END_LOG; return false; } else { colorSelectionArea.left = X; colorSelectionArea.top = Y; color_In_target=0; END_LOG; return true; } } else if (mTargetBtn->Checked) { mTargetShape->Parent = multiColorPanel; mTargetShape->Brush->Color = colorChoice; targetColor=colorChoice; color_In_target=1; END_LOG; return true; } } } else { if (irregular_sTOsBtn->Down) { if (sSIrregularRadio->Checked) { sSIrregularShape->Parent = sSIrregularPanel; sSIrregularShape->Brush->Color = colorChoice; sourceColor=colorChoice; sSIrregularRadio->Checked=false; sTIrregularRadio->Checked=true; color_In_target=0; END_LOG; return false; // s to s À̸é false¸¦ ¸®ÅÏÇÑ´Ù. } else if (sTIrregularRadio->Checked) { sTIrregularShape->Parent = sSIrregularPanel; sTIrregularShape->Brush->Color = colorChoice; sSIrregularRadio->Checked=true; sTIrregularRadio->Checked=false; targetColor=colorChoice; if (WorkArea->Mask) { newgroupingUndo->do_(UT_CCWORKAREA, 0); UndoBtn->Enabled = true; IrregularFillColor(); } color_In_target=1; END_LOG; return true; } } else if (irregular_mTOsBtn->Down) { if (mSIrregularRadio->Checked ) { if(irregularBlockBtn->Down) { colorSelectionArea.left = X; colorSelectionArea.top = Y; colorSelectionArea.right = X+1; colorSelectionArea.bottom = Y+1; if (irregularInsertBtn->Down) multiChangeDelColor(colorSelectionArea, IrregularColorList, IrregularShapeList); else multiChangeGetColor(colorSelectionArea, IrregularColorList, IrregularShapeList); colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); END_LOG; return false; } else { colorSelectionArea.left = X; colorSelectionArea.top = Y; color_In_target=0; END_LOG; return true; } } else if (mTIrregularRadio->Checked) { mTIrregularShape->Parent = mSIrregularPanel; mTIrregularShape->Brush->Color = colorChoice; targetColor=colorChoice; if (WorkArea->Mask) { //-ÇöÀç ÆÈ·¹Æ®¿¡ ÀÖ´Â »öÀ» ÀúÀåÇÑ´Ù.--------- if (IrregularColorList->Count>0) { ResetBackupList(backupIrregularColorList); ReplaceColorListTOBackup(IrregularColorList, backupIrregularColorList); } //------------------------------------------- newgroupingUndo->do_(UT_CCWORKAREA, 0); UndoBtn->Enabled = true; IrregularFillColor(); } color_In_target=1; END_LOG; return true; } } } // ¿©±â±îÁö ¿ÜºÎ else END_LOG; return true; } //--------------------------------------------------------------------------- // µÎ¹øÂ° MouseClickÀÌ ÀϾ¶§ ó¸®ÇÏ´Â ºÎºÐÀÌ´Ù. À̰÷¿¡¼­´Â »öÀ» ¼±ÅÃÇϱâ // À§Çؼ­ ¸¸µé¾îÁø »ç°¢Çü µÎ ÁÂÇ¥¸¦ ³Ñ°ÜÁÖ°í ÃʱâÈ­ ÇÏ´Â ºÎºÐÀÌ ÀÖ´Ù. void __fastcall TNewGroupingForm::ColorChangeSecondBtnClick(int X, int Y) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR) { if (color_In_target) { END_LOG; return; } if (ColorChangeControl->ActivePage == PenTabSheet) { if (pen_mTOsBtn->Down) { colorSelectionArea.right = X; colorSelectionArea.bottom = Y; if (penInsertBtn->Down) multiChangeDelColor(colorSelectionArea, PenColorList, PenShapeList); else multiChangeGetColor(colorSelectionArea, PenColorList, PenShapeList); } colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); } else if (ColorChangeControl->ActivePage == IrregularTabSheet) { // by maxleo21c if (irregular_mTOsBtn->Down) { colorSelectionArea.right = X; colorSelectionArea.bottom = Y; if (irregularInsertBtn->Down) multiChangeDelColor(colorSelectionArea, IrregularColorList, IrregularShapeList); else multiChangeGetColor(colorSelectionArea, IrregularColorList, IrregularShapeList); } colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); } } else if (functionMenu.getCurrentFunction() == FUNC_FILTERING) { if (filterColorBlockBtn->Down) { if (EraseOrganizationBtn->Down) { END_LOG; return; } colorSelectionArea.left = X; colorSelectionArea.top = Y; colorSelectionArea.right = X+1; colorSelectionArea.bottom = Y+1; if (filterColorInsertBtn->Down) multiChangeDelColor(colorSelectionArea, FilterColorList, FilterShapeList); else multiChangeGetColor(colorSelectionArea, FilterColorList, FilterShapeList); } else { colorSelectionArea.right = X; colorSelectionArea.bottom = Y; if (filterColorInsertBtn->Down) multiChangeDelColor(colorSelectionArea, FilterColorList, FilterShapeList); else multiChangeGetColor(colorSelectionArea, FilterColorList, FilterShapeList); } colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); } END_LOG; } //--------------------------------------------------------------------------- // GroupingÇÔ¼ö¿¡¼­ ÀÌ¿ëµÇ´Â »öÀ» ¸¸µå´Â ÇÔ¼ö // »ç°¢Çü¾ÈÀÇ °¢ Çȼ¿ »öÀÇ Áß°£ °ªÀ» ¸®ÅÏÇÑ´Ù. COLORREF TNewGroupingForm::getAverageColor(RECT imageRect) { BEGIN_LOG("::"); Byte *bp; TUnionBitmap *theBitmap = Image->uBitmap; int ix, iy; COLORREF color; int rgb[3][256]; unsigned long temp_red = 0, temp_green = 0, temp_blue = 0, total_pixel = 0; memset(rgb, 0, 3*256*4); imageRect = correctRect(imageRect); if(imageRect.left<0) imageRect.left = 0; if(imageRect.top<0) imageRect.top = 0; if(imageRect.right>=theBitmap->Width) imageRect.right = theBitmap->Width - 1; if(imageRect.bottom>=theBitmap->Height) imageRect.bottom = theBitmap->Height - 1; if (theBitmap->StartScanLine()) { for (iy=imageRect.top; iy<=imageRect.bottom; iy++) { bp = theBitmap->GetScanLine(iy) + 3*imageRect.left; for (ix=imageRect.left; ix<=imageRect.right; ix++, bp+=3) { temp_red = bp[2]; temp_green = bp[1]; temp_blue = bp[0]; rgb[0][temp_red]++; rgb[1][temp_green]++; rgb[2][temp_blue]++; total_pixel++; } } temp_red = 0; temp_green = 0; temp_blue = 0; theBitmap->StopScanLine(); for (int i = 0; i < 256; i++) { if (rgb[0][i]) temp_red += i*rgb[0][i]; if (rgb[1][i]) temp_green += i*rgb[1][i]; if (rgb[2][i]) temp_blue += i*rgb[2][i]; } if(total_pixel != 0){ temp_red /= total_pixel; temp_green /= total_pixel; temp_blue /= total_pixel; } color = (temp_blue << 16) + (temp_green << 8) + temp_red; if (color == 0xFFFFFF) color = 0xFEFEFE; //Èò»öÀÇ ÀúÁÖ ¶§¹®¿¡.. END_LOG; return color; } else { EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); return 0;} } //--------------------------------------------------------------------------- // »öÀ» ¼±ÅÃÇϱâ À§Çؼ­ »ç¿ëµÈ »ç°¢Çü RECT¸¦ ÃʱâÈ­ÇÏ´Â ÇÔ¼ö void TNewGroupingForm::NewGroupingDrawRectangleLocate(RECT rc,int NOR) { BEGIN_LOG("::"); static RECT oldrc=Rect(0,0,0,0); if(NOR==0) { Image->OnPaintLocate = NULL; InvalidateRect(Image->Parent->Handle,&oldrc,false); } else { Image->OnPaintLocate = GroupPaintRectangleLocate;/////////////////by jeegeo FloatingRect.left = Image->BitmapToCanvasX(min(rc.left,rc.right)); FloatingRect.right = Image->BitmapToCanvasX(max(rc.left,rc.right)); FloatingRect.top = Image->BitmapToCanvasY(min(rc.top,rc.bottom)); FloatingRect.bottom = Image->BitmapToCanvasY(max(rc.top,rc.bottom)); InvalidateRect(Image->Parent->Handle,&oldrc,false); InvalidateRect(Image->Parent->Handle,&FloatingRect,false); oldrc=FloatingRect; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbVertScroll(TObject *Sender, TScrollCode ScrollCode, int &ScrollPos) { Image->PositionY = sbVert->Position; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbHorzScroll(TObject *Sender, TScrollCode ScrollCode, int &ScrollPos) { Image->PositionX = sbHorz->Position; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::updateImage() { BEGIN_LOG("::"); TPoint Size; Size.x = pnImage->Width*Image->ZoomOut/Image->ZoomIn; Size.y = pnImage->Height*Image->ZoomOut/Image->ZoomIn; if (Image->uBitmap->WidthMax = 0; else sbHorz->Max = Image->uBitmap->Width-Size.x; sbHorz->SmallChange = sbHorz->Max/10; sbHorz->LargeChange = sbHorz->Max/5; if (Image->uBitmap->HeightMax = 0; else sbVert->Max = Image->uBitmap->Height-Size.y; sbVert->SmallChange = sbVert->Max/10; // SmallChange´Â Àüü »çÀÌÁîÀÇ 1/10 sbVert->LargeChange = sbVert->Max/5; // LargeChange´Â Àüü »çÀÌÁîÀÇ 1/5 END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ZoomChange(int zi, int zo, POINT *ptScreen) { BEGIN_LOG("::"); POINT ptClient; String sbZoom; if (zi!=Image->ZoomIn || zo!=Image->ZoomOut) { Image->isZoomChanged = true; if (ptScreen) { ptClient = Image->ScreenToClient(*ptScreen); Image->SetZoom(zi, zo, &ptClient); } else { Image->SetZoom(zi, zo); } SetZoom(); } ShowZoomText(); updateImage(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ShowZoomText() { BEGIN_LOG("::"); String sbZoom; switch (Image->ZoomIn) { case 1: switch (Image->ZoomOut) { case 1: sbZoom = "1"; break; case 2: sbZoom = "1/2"; break; case 3: sbZoom = "1/3"; break; case 4: sbZoom = "1/4"; break; case 6: sbZoom = "1/6"; break; case 8: sbZoom = "1/8"; break; case 12: sbZoom = "1/12"; break; case 16: sbZoom = "1/16"; break; } break; case 2: switch (Image->ZoomOut) { case 1: sbZoom = "2"; break; case 3: sbZoom = "2/3"; break; } break; case 3: switch (Image->ZoomOut) { case 1: sbZoom = "3"; break; case 2: sbZoom = "3/2"; break; } break; case 4: sbZoom = "4"; break; case 6: sbZoom = "6"; break; case 8: sbZoom = "8"; break; case 12: sbZoom = "12"; break; case 16: sbZoom = "16"; break; } ZoomEdit->Text = sbZoom; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::GroupPaintRectangleLocate(TObject *Sender, HDC formDC) { BEGIN_LOG("::"); RECT rc = FloatingRect; HBRUSH hOldBrush=NULL; HPEN hOldPen=NULL; int nDrawMode; hOldBrush = (HBRUSH)SelectObject(formDC, GetStockObject(NULL_BRUSH)); nDrawMode = GetROP2(formDC); hOldPen = (HPEN)SelectObject(formDC, GetStockObject(BLACK_PEN)); SetROP2(formDC, R2_NOT); Rectangle(formDC, min(rc.left, rc.right)+1, min(rc.top, rc.bottom)+1, max(rc.left, rc.right), max(rc.top, rc.bottom)); SetROP2(formDC, nDrawMode); SelectObject(formDC, hOldBrush); SelectObject(formDC, hOldPen); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ZoomTrackBarChange(TObject *Sender) { BEGIN_LOG("::"); switch (ZoomTrackBar->Position) { case 0: ZoomChange(1, 16); ZoomTrackBar->Hint = "1/16"; break; case 1: ZoomChange(1, 12); ZoomTrackBar->Hint = "1/12"; break; case 2: ZoomChange(1, 8); ZoomTrackBar->Hint = "1/8"; break; case 3: ZoomChange(1, 6); ZoomTrackBar->Hint = "1/6"; break; case 4: ZoomChange(1, 4); ZoomTrackBar->Hint = "1/4"; break; case 5: ZoomChange(1, 3); ZoomTrackBar->Hint = "1/3"; break; case 6: ZoomChange(1, 2); ZoomTrackBar->Hint = "1/2"; break; case 7: ZoomChange(2, 3); ZoomTrackBar->Hint = "2/3"; break; case 8: ZoomChange(1, 1); ZoomTrackBar->Hint = "1"; break; case 9: ZoomChange(3, 2); ZoomTrackBar->Hint = "3/2"; break; case 10: ZoomChange(2, 1); ZoomTrackBar->Hint = "2"; break; case 11: ZoomChange(3, 1); ZoomTrackBar->Hint = "3"; break; case 12: ZoomChange(4, 1); ZoomTrackBar->Hint = "4"; break; case 13: ZoomChange(6, 1); ZoomTrackBar->Hint = "6"; break; case 14: ZoomChange(8, 1); ZoomTrackBar->Hint = "8"; break; case 15: ZoomChange(12, 1); ZoomTrackBar->Hint = "12"; break; case 16: ZoomChange(16, 1); ZoomTrackBar->Hint = "16"; break; } gbStatusBar->Panels->Items[2]->Text = "Zoom : " + ZoomTrackBar->Hint; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::SpecialMouseDown(int X, int Y) { BEGIN_LOG("::"); RECT r; brushMenu.setFirstPoint(X, Y); brushMenu.setSecondPoint(X, Y); New_line_pen(freecolor, &r); Image->RectPaint(r); // Image->RectScreenPaint(r); END_LOG; } //--------------------------------------------------------------------------- // ÀÌ ÇÔ¼ö´Â Á¤È®ÇÏ°Ô ºÐ¼®À» ÇÏÁö ¸øÇÏ¿´´Ù. PenÀ¸·Î »ö¹Ù²Ù±â¿¡¼­ »ç¿ëµÇ´Â ºÎºÐÀÌ´Ù. // ÇÊÅÍ¿¡¼­ Using Penµµ ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. ´ëºÎºÐÀº ¸ð¸£°Ú°í, ¾Æ·¡ ¼öÁ¤ÇÑ ºÎºÐÀ» º¸±â ¹Ù¶÷!! // S : Start, E : End, dia : Diameter // msx : memory alocation about start X, mex: end X // ex) sx -> start X void __fastcall TNewGroupingForm::New_line_pen(COLORREF c, RECT *rect) { BEGIN_LOG("::"); int PenType, dia, ls, rs, w, h, sw, y, x, r, yyy; double d, r1, r2, xx, yy; TNewLineData linedata; int sx = brushMenu.getFirstPoint().x; int sy = brushMenu.getFirstPoint().y; int ex = brushMenu.getSecondPoint().x; int ey = brushMenu.getSecondPoint().y; PenType = 0; if ( UsingPenRemoveBtn->Down ) dia = RxSpinEdit2->Value; else dia = PenSize->Value; // pen Size¸¦ °áÁ¤ÇÏ´Â º¯¼ö ls = dia>>1; // diameter/2 rs = dia-ls; w = Image->uBitmap->Width; h = Image->uBitmap->Height; for (y=0; yh) linedata.sy = h; if (linedata.ey<0) linedata.ey = 0; else if (linedata.ey>h) linedata.ey = h; r = PenType ? (linedata.sx=0 && y=0 && y=0 && y=0 && y*(mex + y)) *(mex + y) = x; } } linedata.sy -= ls; linedata.ey += rs; //------------------------------------------------------------------------- //-ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ÀÌ ¾Æ·¡ºÎºÐ¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù.---------------- unsigned short *chColor = new unsigned short[AfterGroupingColorList->Count]; for (int i=0; iCount; i++) chColor[i]=0; previewBitmap->StartScanLine(); // by maxleo21c tempBitmap->StartScanLine(); for (y=linedata.sy; y<=linedata.ey; y++) { if (y >= 0 && y < h) { if (*(mex + y)>=0 && *(msx + y)StopScanLine(); // by maxleo21c tempBitmap->StopScanLine(); //------------------------------------------------------------------------- // ¿ø¾È¿¡¼­ ¼±ÅÃÇÑ »öÀ̿ܿ¡ °¡Àå ºóµµ¼ö°¡ ³ôÀº »öÀ» ã°í ±× »öÀ¸·Î º¯°æÇÏ´Â ºÎºÐ if ( UsingPenRemoveBtn->Down ) { int indt=0, Max=0; for (int j=0; jCount; j++) { if(Max <= chColor[j]) { Max = chColor[j]; indt = j; } } if (*(TColor *)FilterColorList->Items[0] != *(TColor *)AfterGroupingColorList->Items[indt]) { previewBitmap->StartScanLine(); // by maxleo21c tempBitmap->StartScanLine(); for (y=linedata.sy; y<=linedata.ey; y++) { if (y >= 0 && y < h) { if (*(mex + y)>=0 && *(msx + y)Items[indt]); } } } previewBitmap->StopScanLine(); // by maxleo21c tempBitmap->StopScanLine(); } } delete[] chColor; //------------------------------------------------------------------------- if (rect) { rect->left = min(sx, ex) - ls - 5; rect->top = min(sy, ey) - ls - 5; rect->right = max(sx, ex) + rs + 5; rect->bottom = max(sy, ey) + rs + 5; } if (rect->left < 0) rect->left = 0; // processingBitmap -> previewBitmap À¸·Î º¯°æ by maxleo21c if (rect->right >= previewBitmap->Width) rect->right = previewBitmap->Width; if (rect->top < 0) rect->top = 0; if (rect->bottom >= previewBitmap->Height) rect->bottom = previewBitmap->Height; END_LOG; return; fail: EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::pos_in(TNewLineData &linedata, int by, int bsx, int bex, int ch) { BEGIN_LOG("::"); double d; if ((by>=0) && (byuBitmap->Height)) { if (*(msx+by)>bsx) { if (ch) { d = (linedata.dx1 - bsx) * (linedata.dx1 - bsx) + (linedata.dy1 - by) * (linedata.dy1 - by); if (d= Image->uBitmap->Width || y < 0 || y >= Image->uBitmap->Height) { END_LOG; return; } if (x < 0) { len += x; x = 0; if (len <= 0) { END_LOG; return; } } if (x + len > Image->uBitmap->Width) len = Image->uBitmap->Width-x; if ( UsingPenRemoveBtn->Down ) fileterPCSSetHLine24(x, y, len, chColor); else SetHLine24(x, y, len); END_LOG; return; } //--------------------------------------------------------------------------- bool __fastcall TNewGroupingForm::AllocLineMem(int d) { BEGIN_LOG("::"); if (d!=memsize) { DelLineMem(); if ((hMemLine = GlobalAlloc(GHND, 2*d*sizeof(int)))==NULL) goto fail; if ((msx = (int *)GlobalLock(hMemLine))==NULL) goto fail; mex = (int *)msx + d; memsize = d; } END_LOG; return true; fail: DelLineMem(); END_LOG; return false; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::DelLineMem() { BEGIN_LOG("::"); if (hMemLine) { if (msx) { GlobalUnlock(hMemLine); msx = NULL; } GlobalFree(hMemLine); hMemLine = NULL; } memsize = 0; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::FormDestroy(TObject *Sender) { BEGIN_LOG("::"); doDestroy(gStatusProgress) DelLineMem(); doDestroy(WorkArea) ResetPointList(); deleteBitmaps(); if (newgroupingUndo) {delete newgroupingUndo; newgroupingUndo=NULL;} // ColorInImage¿¡ ÀÖ´Â »öÁß ¼±ÅÃµÈ »öÀÇ Bool°ªÀ» ÀúÀå if (selectedColor) {delete[] selectedColor; selectedColor=NULL;} if (PointList) {delete PointList; PointList=NULL;} END_LOG; } //--------------------------------------------------------------------------- // sourceColor -> TargetColor : Color Change by maxleo21c void __fastcall TNewGroupingForm::SetHLine24(int x, int y, int len) { BEGIN_LOG("::"); Byte *buffer=NULL; Byte sb, sg, sr, tb, tg, tr; Byte items_red = 0, items_green = 0, items_blue = 0; buffer = previewBitmap->GetScanLine(y, x, len) + x * 3; tb=(targetColor>>16) & 0xff; tg=(targetColor>>8) & 0xff; tr=targetColor & 0xff; if (pen_sTOsBtn->Down) { sb=(sourceColor>>16) & 0xff; sg=(sourceColor>>8) & 0xff; sr=sourceColor & 0xff; for (int i = x; i < x + len; i++, buffer+=3) { if (buffer[0]==sb && buffer[1]==sg && buffer[2]==sr) { buffer[0]=tb; buffer[1]=tg; buffer[2]=tr; } } } else { for (int i = x; i < x + len; i++, buffer+=3) { for (int j=0; jCount; j++) { items_red = (Byte)(*(TColor*)(PenColorList->Items[j])) & 0xFF; items_green = (Byte)(*((TColor*)(PenColorList->Items[j])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(PenColorList->Items[j])) >> 16) & 0xFF; if ( buffer[2] == items_red && buffer[1] == items_green && buffer[0] == items_blue ) { buffer[0]=tb; buffer[1]=tg; buffer[2]=tr; } } } } // else previewBitmap->PutScanLine(y, x, len); END_LOG; } //--------------------------------------------------------------------------- // Filter Pen Color Select - ³ëÀÌÁö¸¦ ¾î¶² »öÀ¸·Î º¯°æÇÒ °ÍÀÎÁö °áÁ¤ÇÏ´Â ºÎºÐ void __fastcall TNewGroupingForm::fileterPCSSetHLine24(int x, int y, int len, unsigned short *chColor) { BEGIN_LOG("::"); Byte *buffer=NULL; Byte *tBuffer=NULL; TColor sCP; TColor tCP; TColor tempCP; int i, j; if (wantedColorClick) buffer = tempBitmap->GetScanLine(y, x, len) + x * 3; else buffer = previewBitmap->GetScanLine(y, x, len) + x * 3; for (i=0; iCount; j++) { tCP = *(TColor *)AfterGroupingColorList->Items[j]; if ( tCP == tempCP ) chColor[j]++; } } END_LOG; } //--------------------------------------------------------------------------- // fileter Pen Color Change - PenÀ¸·Î ³ëÀÌÁî Á¦°Å(Using Pen)¿¡ »ç¿ë void __fastcall TNewGroupingForm::fileterPCCSetHLine24(int x, int y, int len, TColor *tCP) { BEGIN_LOG("::"); Byte *buffer=NULL; Byte *tBuffer=NULL; TColor sCP, tempCP; int i, j; if (x >= Image->uBitmap->Width || y < 0 || y >= Image->uBitmap->Height) { END_LOG; return; } if (x < 0) { len += x; x = 0; if (len <= 0) { END_LOG; return; } } if (x + len > Image->uBitmap->Width) len = Image->uBitmap->Width-x; sCP = *(TColor *)FilterColorList->Items[0]; if (wantedColorClick) { buffer = tempBitmap->GetScanLine(y, x, len) + x * 3; tBuffer = previewBitmap->GetScanLine(y, x, len) + x * 3; } else buffer = previewBitmap->GetScanLine(y, x, len) + x * 3; for (i=0; i>16) & 0xff; buffer[3*i+1]=(*tCP >>8) & 0xff; buffer[3*i+2]= *tCP & 0xff; if (wantedColorClick) { tBuffer[3*i] =0xFF; tBuffer[3*i+1]=0xFF; tBuffer[3*i+2]=0xFF; } } } previewBitmap->PutScanLine(y, x, len); tempBitmap->PutScanLine(y, x, len); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::SpecialMouseMove(TShiftState Shift, int X, int Y) { BEGIN_LOG("::"); RECT r; brushMenu.setSecondPoint(X, Y); New_line_pen(freecolor, &r); Image->RectPaint(r); // Image->RectScreenPaint(r); brushMenu.setFirstPoint(X, Y); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::iMainImageKeyDown(WORD Key, TShiftState Shift) { BEGIN_LOG("::"); bool IsEditMode = false; /* if (NewGroupingViewForm->Visible) { NewGroupingViewForm->ViewFormKeyDown(Key); } else */if(!IsEditMode) { // if(Shift.Contains(ssCtrl) && Key == 'Y') { // Ctrl+Y Redo // if (RedoBtn->Enabled == false) { // END_LOG; // return; // } // RedoBtnClick(this); // } else if(Shift.Contains(ssCtrl) && Key == 'Z') { // Ctrl+Z Undo // if (UndoBtn->Enabled == false) { // END_LOG; // return; // } // UndoBtnClick(this); // } else if(Shift.Contains(ssShift) && Key == 'S') {// SHIFT + S (Save File) Àӽ÷Π¸¸µê -05.07.22 SaveGroupingFile(); } else if(Shift.Contains(ssShift) && Key == 'L') {// SHIFT + L (Load File) Àӽ÷Π¸¸µê -05.07.22 LoadGroupingFile(); } else if (Key == 'X') { // 120: x 88: X down , 122 : z 90: Z down colorSelectionStep = 0; isFirst = true; isDrawingRegion = false; IsDraw = false; Image->OnPaintLocate = NULL;/////////////////by jeegeo if (Item==NG_IRREGULAR) { if (PointList->Count>2) IrregularClose(this); } Image->Repaint(); } else if (Key == 'Z') { // by maxleo21c (°¢µµ 󸮸¦ À§Çؼ­) pressZ=1; } else if (Key == 'C') { // 'C' or 'c' ±×¸®±â Ãë¼Ò¹öư WADraw(-2); ResetPointList(); Step = 0; } // else if(((Key == 65) || (Key == 97)) && (Key != VK_NUMPAD1)) //'a' or 'A' // { // int Ratio = 0; // Key = 0; // switch (Image->ZoomIn) { //ÇöÀçÀÇ È®´ë, Ãà¼ÒµÈ ºñÀ²Àº ¾Ë¾Æ³»¾î // case 1: switch (Image->ZoomOut) { // ºñÀ²¿¡ µû¶ó ratio¶ó´Â º¯¼ö¿¡ Àû´çÇÑ °ªÀ» // case 1: Ratio = 302; break; // ÀԷ½Ã۰í, ±×°ÍÀº parameter·Î ÇÏ´Â ÇÔ¼ö(RatioZoom) // case 2: Ratio = 203; break; // ¸¦ È£ÃâÇÑ´Ù. // case 3: Ratio = 102; break; // case 4: Ratio = 103; break; // ¼öÁ¤ By GreenFish (Áܴܰè È®Àå) // case 6: Ratio = 104; break; // case 8: Ratio = 106; break; // case 12: Ratio = 108; break; // case 16: Ratio = 112; break; // } // break; // case 2: switch (Image->ZoomOut) { // case 1: Ratio = 301; break; // case 3: Ratio = 101; break; // } // break; // case 3: switch (Image->ZoomOut) { // case 1: Ratio = 401; break; // case 2: Ratio = 201; break; // } // break; // case 4: Ratio = 601; break; // case 6: Ratio = 801; break; // case 8: Ratio = 1201; break; // case 12: Ratio = 1601; break; // default: { // END_LOG; // return; // } // } // RatioZoom(Ratio); // } else if((Key == 83) || (Key == 115)){ // 's' or 'S' // // int Ratio = 0; // Key = 0; // switch (Image->ZoomIn) { // case 1: switch (Image->ZoomOut) { // case 1: Ratio = 203 ; break; // case 2: Ratio = 103; break; // case 3: Ratio = 104; break; // case 4: Ratio = 106; break; // case 6: Ratio = 108; break; // case 8: Ratio = 112; break; // case 12: Ratio = 116; break; // default: { // END_LOG; // return; // } // } // break; // case 2: switch (Image->ZoomOut) { // case 1: Ratio = 302; break; // case 3: Ratio = 102; break; // } // break; // case 3: switch (Image->ZoomOut) { // case 1: Ratio = 201; break; // case 2: Ratio = 101; break; // } // break; // case 4: Ratio = 301; break; // case 6: Ratio = 401; break; // case 8: Ratio = 601; break; // case 12 : Ratio = 801; break; // case 16 : Ratio = 1201; break; // default: { // END_LOG; // return; // } // } // RatioZoom(Ratio); // } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::iMainImageKeyUp(int Key) // by maxleo21c { BEGIN_LOG("::"); // lhskys z۸¦ ´­·¶´Ù°¡ ³õ¾ÒÀ»¶§ if (Key == 'Z') { if (functionMenu.getCurrentFunction() == FUNC_WORKAREA || nooseBtn->Down || nooseBtn1->Down) pressZ = 0; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::BtnFinish256Click(TObject *Sender) { BEGIN_LOG("::"); int i, zi, zo; // speed-test int width, height; TCursor cur; RGBQUAD rgb[256]; TMainImageForm *Child = NULL; if (wantedColorClick) previewBitmap->Copy(tempBitmap, SRCCOPY); TPCanvasInfor ci = MainImageForm->CanvasInfor; ci.SizeType = cstFree; ci.Width = previewBitmap->Width; ci.Height = previewBitmap->Height; TPException ec = EC_NONE; PenManagerForm->spread_sw[4] = 0; PenManagerForm->aspread = false; PenManagerForm->acolor = 0; cur = Screen->Cursor; Screen->Cursor = crHourGlass; if ((Child = new TMainImageForm(Application))==NULL) { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } if ((ec = Child->InitForm(ci, 8))!=EC_NONE) goto fail; FullViewForm->GetZoomRatio(Child->iMainImage, zi, zo); // speed-test if (previewBitmap->BitsPerPixel != 8) { previewBitmap->ColorResolution(8, CRF_OPTIMIZEDPALETTE, NULL, 250); } previewBitmap->GetColors(0, 256, rgb); //-----Èò»öÀÇ ÀúÁÖ ¶§¹®¿¡..----------- /* for (i = 0; i < 256; i++ ) { if (rgb[i].rgbRed == 0xFE && rgb[i].rgbGreen == 0xFE && rgb[i].rgbBlue == 0xFE) { rgb[i].rgbRed = 0xFF; rgb[i].rgbGreen = 0xFF; rgb[i].rgbRed = 0xFF; } } previewBitmap->PutColors(0, 256, rgb); */ //------------------------------------ Child->iMainImage->uBitmap->PutColors(0, 256, rgb); Child->iMainImage->uBitmap->Copy(0, 0, Child->iMainImage->uBitmap->Width, Child->iMainImage->uBitmap->Height, previewBitmap, 0, 0, SRCCOPY); Child->setPaletteData(rgb, true); Child->findUsedColor(true); Child->Palette->ToRGBQUAD(rgb, 256); Child->iMainImage->uBitmap->PutColors(0, 256, rgb); Child->iMainImage->InitbmFullView(zi, zo, PaletteForm->DIB256Palette->GetBGCOLORREF(8), rgb); // speed-test Child->iMainImage->uBitmap->SetAllToModified(); // convert by celberus fullview º¸¿©ÁÖ±â À§ÇØ Child->iMainImage->ChangeRGBColors(rgb); PaletteForm->InitForm(Child->Palette); width = ci.Width + sbVert->Width + 4; height = ci.Height + sbHorz->Height + 4; if (width < Child->ClientWidth) Child->ClientWidth = width; if (height < Child->ClientHeight) Child->ClientHeight = height; bClose = true; hWnd=((TWinControl *)Owner)->Handle; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); Screen->Cursor = cur; END_LOG; return; fail: if (Child) delete Child; Screen->Cursor = cur; EXCEPTION_MESSAGE_OK(ec); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::BtnFinishClick(TObject *Sender) { /* int w, h; if (wantedColorClick) previewBitmap->Copy(tempBitmap, SRCCOPY); TRect Src = Rect(0, 0, 0, 0); if (MainImageForm->WorkArea->Mask) { Src = MainImageForm->WorkArea->Range; } else { Src.Right = MainImageForm->iMainImage->uBitmap->Width; Src.Bottom = MainImageForm->iMainImage->uBitmap->Height; } MainImageForm->iMainImage->uBitmap->Copy(Src.Left, Src.Top, Src.Right - Src.Left, Src.Bottom - Src.Top, previewBitmap, 0, 0, SRCCOPY); hWnd=((TWinControl *)Owner)->Handle; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); */ //------------------------------------------------------------------------- // Full ColorÀÏ ¶§¿¡µµ »õ·Î¿î â¿¡ ³ªÅ¸³ªµµ·Ï ó¸®Çϱâ À§Çؼ­ BEGIN_LOG("::"); int i, zi, zo; // speed-test int width, height; TCursor cur; RGBQUAD rgb[256]; TMainImageForm *Child = NULL; if (checkColorInImage() == false) { hWnd=((TWinControl *)Owner)->Handle; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); END_LOG; return; } if (wantedColorClick) previewBitmap->Copy(tempBitmap, SRCCOPY); TPCanvasInfor ci = MainImageForm->CanvasInfor; ci.SizeType = cstFree; ci.Width = previewBitmap->Width; ci.Height = previewBitmap->Height; TPException ec = EC_NONE; PenManagerForm->spread_sw[4] = 0; PenManagerForm->aspread = false; PenManagerForm->acolor = 0; cur = Screen->Cursor; Screen->Cursor = crHourGlass; if ((Child = new TMainImageForm(Application))==NULL) { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } if ((ec = Child->InitForm(ci, 24))!=EC_NONE) goto fail; FullViewForm->GetZoomRatio(Child->iMainImage, zi, zo); // speed-test Child->iMainImage->uBitmap->Copy(0, 0, Child->iMainImage->uBitmap->Width, Child->iMainImage->uBitmap->Height, previewBitmap, 0, 0, SRCCOPY); Child->iMainImage->InitbmFullView(zi, zo, PaletteForm->DIB256Palette->GetBGCOLORREF(24), rgb); // speed-test Child->iMainImage->uBitmap->SetAllToModified(); // convert by celberus fullview º¸¿©ÁÖ±â À§ÇØ PaletteForm->InitForm(Child->Palette); width = ci.Width + sbVert->Width + 4; height = ci.Height + sbHorz->Height + 4; if (width < Child->ClientWidth) Child->ClientWidth = width; if (height < Child->ClientHeight) Child->ClientHeight = height; bClose = true; hWnd=((TWinControl *)Owner)->Handle; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); Screen->Cursor = cur; END_LOG; return; fail: if (Child) delete Child; Screen->Cursor = cur; EXCEPTION_MESSAGE_OK(ec); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::BtnCancelClick(TObject *Sender) { BEGIN_LOG("::"); hWnd=((TWinControl *)Owner)->Handle; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ImagePositionChange(TObject *Sender) { BEGIN_LOG("::"); sbHorz->Position = Image->PositionX; sbVert->Position = Image->PositionY; END_LOG; } //--------------------------------------------------------------------------- RECT __fastcall TNewGroupingForm::correctRect(RECT srcRect) { BEGIN_LOG("::"); RECT resultRect; if (srcRect.left>srcRect.right) { resultRect.left = srcRect.right; resultRect.right = srcRect.left; } else { resultRect.left = srcRect.left; resultRect.right = srcRect.right; } if (srcRect.top>srcRect.bottom) { resultRect.top = srcRect.bottom; resultRect.bottom = srcRect.top; } else { resultRect.top = srcRect.top; resultRect.bottom = srcRect.bottom; } END_LOG; return resultRect; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initFunctionMenu() // n { BEGIN_LOG("::"); functionMenu.initMenu(); END_LOG; } //--------------------------------------------------------------------------- __fastcall FunctionMenu::FunctionMenu() { currentFunction = FUNC_NONE; highlightedItem = FUNC_NONE; } //--------------------------------------------------------------------------- void __fastcall FunctionMenu::initMenu() // n { BEGIN_LOG("::"); setFunction(FUNC_BLUR); highlightedItem = FUNC_BLUR; END_LOG; } //--------------------------------------------------------------------------- void __fastcall FunctionMenu::setFunction(FunctionType value) // n { BEGIN_LOG("::"); exitCurrentFunction(); currentFunction = value; if (currentFunction != highlightedItem) highlightItem(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall FunctionMenu::highlightItem() // n { BEGIN_LOG("::"); shapeColorChange(highlightedItem, clBlack); shapeColorChange(currentFunction, clRed); highlightedItem = currentFunction; END_LOG; } //--------------------------------------------------------------------------- void __fastcall FunctionMenu::shapeColorChange(FunctionType value, TColor color) // n { BEGIN_LOG("::"); NewGroupingForm->shapeFunctionColorChange(value, color); END_LOG; } //--------------------------------------------------------------------------- // ¸Þ´ºÀÇ ¹öưÀÌ ´­·ÈÀ» ¶§ ¹ØÀÇ shapeÀÇ »öÀ» º¯°æÇÏ´Â ºÎºÐ void __fastcall TNewGroupingForm::shapeFunctionColorChange(FunctionType value, TColor color) // n { /* if (value == FUNC_BLUR) { Shape6->Brush->Color = color; Shape6->Pen->Color = color; } else if (value == FUNC_FILTERING) { Shape7->Brush->Color = color; Shape7->Pen->Color = color; } else if (value == FUNC_CHANGECOLOR) { Shape8->Brush->Color = color; Shape8->Pen->Color = color; } else if (value == FUNC_WORKAREA) { Shape9->Brush->Color = color; Shape9->Pen->Color = color; } else if (value == FUNC_GROUPING) { Shape1->Brush->Color = color; Shape1->Pen->Color = color; } else if (value == FUNC_HALFTONE) { Shape2->Brush->Color = color; Shape2->Pen->Color = color; } else if (value == FUNC_UNDO) { Shape10->Brush->Color = color; Shape10->Pen->Color = color; } else if (value == FUNC_REDO) { Shape11->Brush->Color = color; Shape11->Pen->Color = color; } */ } //--------------------------------------------------------------------------- FunctionType __fastcall FunctionMenu::getCurrentFunction() { return currentFunction; } //--------------------------------------------------------------------------- void __fastcall FunctionMenu::exitCurrentFunction() { // } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::resetPreviewBitmap() { BEGIN_LOG("::"); previewBitmap->ExactCopy(originalBitmap); blurBitmap->ExactCopy(originalBitmap); END_LOG; } //--------------------------------------------------------------------------- void __fastcall BrushMenu::setFirstPoint(int x, int y) { BEGIN_LOG("::"); freeStartPoint = Point(x, y); END_LOG; } //--------------------------------------------------------------------------- void __fastcall BrushMenu::setSecondPoint(int x, int y) { freeEndPoint = Point(x, y); } //--------------------------------------------------------------------------- TPoint __fastcall BrushMenu::getFirstPoint() { return freeStartPoint; } //--------------------------------------------------------------------------- TPoint __fastcall BrushMenu::getSecondPoint() { return freeEndPoint; } //--------------------------------------------------------------------------- RECT __fastcall BrushMenu::getDrawingRect() { return drawingRect; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RgnTimer(TObject *Sender) { BEGIN_LOG("::"); Image->OutlineBitmapRgn(true); END_LOG; } //--------------------------------------------------------------------------- // »þÇÂÀ» ³·Ãß¿ö¼­ ³ëÀÌÁ ÁÙ¿© º¸ÀÌ°Ô ÇÑ´Ù. void __fastcall TNewGroupingForm::blurButtonClick(TObject *Sender) { BEGIN_LOG("::"); ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. functionMenu.setFunction(FUNC_BLUR); hWnd = ((TWinControl *)Owner)->Handle; blurControlForm = new TblurControlForm(this); initImage(originalBitmap, previewBitmap); blurControlForm->ShowModal(); if ( blurControlForm->blur_OKBtn == true) { TCursor cur; cur = Screen->Cursor; Screen->Cursor = crHourGlass; newgroupingUndo->do_(UT_BLUR, 0); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; // texpiabitmap¿¡¼­ texunionbitmapÀ¸·Î copyÇϸ鼭 undo/redo save°¡ ÀÚµ¿À¸·Î µÇÁö ¾Ê¾Æ¼­ »ç¿ë blurBitmap->PartialUndo->RangeSaveUndo(0, 0, blurBitmap->Width, blurBitmap->Height); blurBitmap->Copy(0, 0, previewBitmap->Width, previewBitmap->Height, blurControlForm->afterImage->Bitmap, 0, 0, SRCCOPY); previewBitmap->PartialUndo->RangeSaveUndo(0, 0, previewBitmap->Width, previewBitmap->Height); previewBitmap->Copy(0, 0, previewBitmap->Width, previewBitmap->Height, blurControlForm->afterImage->Bitmap, 0, 0, SRCCOPY); Image->Repaint(); blurBitmap->Copy(previewBitmap, SRCCOPY); existBluredImage = true; if ( ColorInImagePanel->Visible ) { // ¿­·Á ÀÖ´Â ¸ðµç ¸Þ´º¿Í ColorIn Image°¡ ´ÝÈ÷´Â ºÎºÐ ColorChangeControl->Visible = false; pnHalftonePalette->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = false; filterPanel->Visible = false; WorkAreaPanel->Visible = false; ColorInImagePanel->Visible = false; //-------------------------------------------------- fileteringButton->Enabled = false; colorChangeBtn->Enabled = false; workAreaBitBtn->Enabled = false; sbInitHalftone->Enabled = false; blurButton->Enabled = true; sbInitGrouping->Enabled = true; } UndoBtn->Enabled = true; Screen->Cursor = cur; } else if (!existBluredImage) { TTexpiaBitmap *tBlurBitmap = new TTexpiaBitmap; tBlurBitmap->Create(originalBitmap->Width, originalBitmap->Height, originalBitmap->BitsPerPixel, originalBitmap->RGB); originalBitmap->CopyToTexpia(tBlurBitmap, 0, 0, originalBitmap->Width, originalBitmap->Height, 0, 0, SRCCOPY); L_SharpenBitmap(tBlurBitmap->Handle, -1000 ); // halftone¿¡ »ç¿ëÇÏ´Â BlurBitmap¿¡ unsharpenÀ» ÁØ´Ù. blurBitmap->Copy(0, 0, tBlurBitmap->Width, tBlurBitmap->Height, tBlurBitmap, 0, 0, SRCCOPY); delete tBlurBitmap; tBlurBitmap = NULL; existBluredImage = true; } delete blurControlForm; functionMenu.setFunction(FUNC_NONE); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ExitFunction() { BEGIN_LOG("::"); switch(functionMenu.getCurrentFunction()) { case FUNC_NONE: break; case FUNC_BLUR: break; case FUNC_FILTERING: filterPanel->Visible = false; WADraw(-2); ResetPointList(); Step = 0; case FUNC_CHANGECOLOR: ColorChangeControl->Visible = false; if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } break; case FUNC_WORKAREA: WADraw(-2); ResetPointList(); Step = 0; WorkAreaPanel->Visible = false; break; case FUNC_GROUPING: pnGrouping->Visible = false; pnHalftonePalette->Visible = false; if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } break; case FUNC_HALFTONE: WADraw(-2); ResetPointList(); Step = 0; pnHalftonePalette->Visible = false; pnHalftone->Visible = false; break; case FUNC_UNDO: break; case FUNC_REDO: break; } functionMenu.setFunction(FUNC_NONE); sbExit->Visible=false; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::colorChangeBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() != FUNC_CHANGECOLOR) ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. functionMenu.setFunction(FUNC_CHANGECOLOR); ResetShape(PenColorList, PenShapeList); ResetShape(IrregularColorList, IrregularShapeList); sbExit->Visible=true; initColorChangeBtn(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::workAreaBitBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() != FUNC_WORKAREA) ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. functionMenu.setFunction(FUNC_WORKAREA); sbExit->Visible=true; initWorkAreaMenu(); END_LOG; } //--------------------------------------------------------------------------- // IrregularMouseDown, Move, Up, initworkAreaMenuµîÀº Window.cpp¿¡¼­ Âü°íÇÏ¿´´Ù. // LayerImage.cpp¿¡ ÀÖ´Â OutlineBitmapRgnÀÌ ºÒ·ÁÁ®¼­ RegionÀ» ¸¸µç´Ù. // WorkArea¸¦ ÀÌ¿ëÇØ¼­ Mask¸¦ ó¸®ÇÏ´Â ·çƾ ÇÊ¿ä-->ÇöÀç»óȲ void __fastcall TNewGroupingForm::initWorkAreaMenu() { BEGIN_LOG("::"); if ( WorkAreaPanel->Visible == false ) { WorkAreaPanel->Visible = true; // ´Ù¸¥ ¸Þ´º¸¦ °¨Ãß´Â ºÎºÐ ---------- ColorChangeControl->Visible = false; filterPanel->Visible = false; pnHalftonePalette->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = false; //----------------------------------- ExitItem(); InitItem(NG_IRREGULAR); } else { ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initColorChangeBtn() { BEGIN_LOG("::"); if ( ColorChangeControl->Visible == false ) { ColorChangeControl->Visible = true; // ´Ù¸¥ ¸Þ´º¸¦ ´Ý´Â ºÎºÐ ------------- pnHalftonePalette->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = false; filterPanel->Visible = false; WorkAreaPanel->Visible = false; //------------------------------------ if (ColorChangeControl->ActivePage == PenTabSheet) initColorChangePen(); else initColorChangeWindow(); } else { ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initColorChangePen() { BEGIN_LOG("::"); BrushType defaultBrush = BR_PIXEL; // Filter Unsing PenÀ» ÃʱâÈ­----- UsingPenRemoveBtn->Down = false; //-------------------------------- PenFormResize(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::PenFormResize() { BEGIN_LOG("::"); if (pen_sTOsBtn->Down) { sSourceBtn->Checked = true; ColorChangeControl->Height = 190; Label1->Top = 140; PenSize->Top = 140; singleColorPanel->Visible = true; multiColorPanel->Visible = false; } else { mSourceBtn->Checked = true; ColorChangeControl->Height = 245; Label1->Top = 194; PenSize->Top = 194; singleColorPanel->Visible = false; multiColorPanel->Visible = true; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initColorChangeWindow() { BEGIN_LOG("::"); WindowFormResize(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::WindowFormResize() { BEGIN_LOG("::"); if ( irregular_sTOsBtn->Down ) { ColorChangeControl->Height = 165; sSIrregularPanel->Visible = true; mSIrregularPanel->Visible = false; sSIrregularRadio->Checked = true; } else { ColorChangeControl->Height = 212; sSIrregularPanel->Visible = false; mSIrregularPanel->Visible = true; mSIrregularRadio->Checked = true; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initfileteringButton() { BEGIN_LOG("::"); if( filterPanel->Visible == false ) { filterPanel->Visible = true; pnHalftonePalette->Visible = false; WorkAreaPanel->Visible = false; ColorChangeControl->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = false; filterBigScaleBtn->Down = true; filterBigScaleBtnClick(this); } else { ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. } END_LOG; } //-------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initGroupingMenu() { BEGIN_LOG("::"); if( pnGrouping->Visible == false ) { pnGrouping->Visible = true; pnHalftonePalette->Visible = false; sbHalftone->Visible=false; sbGrouping->Visible=true; filterPanel->Visible = false; WorkAreaPanel->Visible = false; ColorChangeControl->Visible = false; pnHalftone->Visible = false; pen_mTOsBtn->Down = false; irregular_mTOsBtn->Down = false; } else { ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initHalftoneMenu() { BEGIN_LOG("::"); if( pnHalftone->Visible == false ) { ColorChangeControl->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = true; pnHalftonePalette->Visible = true; WorkAreaPanel->Visible = false; filterPanel->Visible = false; pnHalftonePalette->Top = pnHalftone->Top + pnHalftone->Height; sbHalftone->Visible=true; sbGrouping->Visible=false; } else { ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::PaintZoomRectangle(TObject *Sender, HDC dc) { BEGIN_LOG("::"); TPItemImage *Image = (TPItemImage *)Sender; RECT rr; int diff = abs(First.x-Second.x) - abs(First.y-Second.y); HBRUSH hOldBrush; COLORREF clOldBk; HPEN hPen, hOldPen; if (Step>0) { if (SubItem==NG_CIRCLE || SubItem==NG_SQUARE){ //by jeegeo if (diff > 0) { if (First.x>Second.x) { Second.x+=diff; } else { Second.x-=diff; } } else { if (First.y>Second.y) { Second.y-=diff; } else { Second.y+=diff; } } } rr.left = min(First.x, Second.x); rr.top = min(First.y, Second.y); rr.right = max(First.x, Second.x)+1;//ÀåÁø¸¸: +1ÀÌ ¿ÖÇÊ¿äÇÑÁö? rr.bottom = max(First.y, Second.y)+1; rr.left = Image->BitmapToCanvasX(rr.left); rr.top = Image->BitmapToCanvasY(rr.top)-Image->MarginY; rr.right = Image->BitmapToCanvasX(rr.right); rr.bottom = Image->BitmapToCanvasY(rr.bottom)-Image->MarginY; hOldBrush = (HBRUSH)SelectObject(dc, GetStockObject(NULL_BRUSH)); clOldBk = SetBkColor(dc, clWhite); hPen = CreatePen(PS_DOT, 1, clBlack); hOldPen = (HPEN)SelectObject(dc, hPen); if (SubItem==NG_ELLIPSE || SubItem==NG_CIRCLE) { Ellipse(dc, rr.left, rr.top, rr.right, rr.bottom); } if (SubItem==NG_RECTANGLE || SubItem==NG_SQUARE) { Rectangle(dc, rr.left, rr.top, rr.right, rr.bottom); } SelectObject(dc, hOldPen); DeleteObject(hPen); SetBkColor(dc, clOldBk); SelectObject(dc, hOldBrush); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::PaintZoomIrregular(TObject *Sender, HDC dc) { BEGIN_LOG("::"); TPItemImage *tempImage = (TPItemImage *)Sender; HBRUSH hOldBrush; COLORREF clOldBk; HPEN hPen, hOldPen; RECT rr; int i; TWAPointData *pd; TPoint pt[3]; double length; //lhskys ±æÀ̸¦ ÀÌ¿ëÇϱâ À§Çؼ­ double dx,dy,lx,ly; //lhskys x,yÀÇ º¯È­·® if (Step>0) { hOldBrush = (HBRUSH)SelectObject(dc, GetStockObject(NULL_BRUSH)); clOldBk = SetBkColor(dc, clWhite); hPen = CreatePen(PS_DOT, 1, clBlack); hOldPen = (HPEN)SelectObject(dc, hPen); if (Method<0) { pd = (TWAPointData *)PointList->First(); pt[2].x = tempImage->BitmapToCanvasX(pd->Pos.x); pt[2].y = tempImage->BitmapToCanvasY(pd->Pos.y)-tempImage->MarginY; MoveToEx(dc, pt[2].x, pt[2].y, NULL); if (PointList->Count>1) { for (i=1; i<=PointList->Count-1; i++) { pd = (TWAPointData *)PointList->Items[i]; pt[2].x = tempImage->BitmapToCanvasX(pd->Pos.x); pt[2].y = tempImage->BitmapToCanvasY(pd->Pos.y)-tempImage->MarginY; if (pd->Curve) { pt[0].x = tempImage->BitmapToCanvasX(pd->Apex.x); pt[0].y = tempImage->BitmapToCanvasY(pd->Apex.y)-tempImage->MarginY; pt[1] = pt[0]; PolyBezierTo(dc, pt, 3); } else { LineTo(dc, pt[2].x, pt[2].y); } } } switch (Method) { case -2: if((functionMenu.getCurrentFunction() == FUNC_WORKAREA && pressZ==1) || ( (nooseBtn->Down || nooseBtn1->Down) && pressZ==1) ){ //lhskys zŰ Á÷°¢Ç¥½Ã Second=pd->Pos; //lhskys ¹þ¾î³ª´ÂÁ¡À» Àç À§Ä¡·Î... if(DeleteClick==1)Second=pt[2]; //lhskys ÇÑÁ¡µÚ·Î ÇßÀ»¶§ Á¡°ªÀ» ´Ù½Ã ÀÔ·Â int x1,x2,y1,y2; // °¢µµ üũ x1=First.x; // ¹× x2=Second.x; // ±×¸®±â y1=First.y; y2=Second.y; if((y2-y1>=x2-x1)&&(y2-y1>=x1-x2)){ First.x=Second.x; pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y); LineTo(dc,pt[2].x,pt[2].y); } if((y2-y1>=x2-x1)&&(y2-y1<=x1-x2)){ First.y=Second.y; // y = x ±âÁØÀ¸·Î pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y); LineTo(dc,pt[2].x,pt[2].y); } if((y2-y1<=x2-x1)&&(y2-y1>=x1-x2)){ First.y=Second.y; pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y); LineTo(dc,pt[2].x,pt[2].y); } if((y2-y1<=x2-x1)&&(y2-y1<=x1-x2)){ First.x=Second.x; pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y); LineTo(dc,pt[2].x,pt[2].y); } DeleteClick = 0; break; } //¿ä±â±îÁö pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y)-tempImage->MarginY; LineTo(dc, pt[2].x, pt[2].y); break; case -3: pd = (TWAPointData *)PointList->First(); pt[2].x = tempImage->BitmapToCanvasX(pd->Pos.x); pt[2].y = tempImage->BitmapToCanvasY(pd->Pos.y)-tempImage->MarginY; LineTo(dc, pt[2].x, pt[2].y); break; case -4: pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y)-tempImage->MarginY; pt[0].x = tempImage->BitmapToCanvasX(Second.x); pt[0].y = tempImage->BitmapToCanvasY(Second.y)-tempImage->MarginY; pt[1] = pt[0]; PolyBezierTo(dc, pt, 3); break; } } else { if (Method==0) { pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y)-tempImage->MarginY; MoveToEx(dc, pt[2].x, pt[2].y, NULL); } else { pd = (TWAPointData *)PointList->First(); pt[2].x = tempImage->BitmapToCanvasX(pd->Pos.x); pt[2].y = tempImage->BitmapToCanvasY(pd->Pos.y)-tempImage->MarginY; MoveToEx(dc, pt[2].x, pt[2].y, NULL); } if (PointList->Count>1) { for (i=1; i<=PointList->Count-1; i++) { pd = (TWAPointData *)PointList->Items[i]; if (pd->Curve) { pt[2].x = tempImage->BitmapToCanvasX(pd->Apex.x); pt[2].y = tempImage->BitmapToCanvasY(pd->Apex.y)-tempImage->MarginY; if (Method==i) { pt[0].x = tempImage->BitmapToCanvasX(First.x); pt[0].y = tempImage->BitmapToCanvasY(First.y)-tempImage->MarginY; pt[1] = pt[0]; PolyBezierTo(dc, pt, 3); } else { pt[0].x = tempImage->BitmapToCanvasX(pd->Pos.x); pt[0].y = tempImage->BitmapToCanvasY(pd->Pos.y)-tempImage->MarginY; pt[1] = pt[0]; PolyBezierTo(dc, pt, 3); } } else { if (Method==i) { pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y)-tempImage->MarginY; LineTo(dc, pt[2].x, pt[2].y); } else { pt[2].x = tempImage->BitmapToCanvasX(pd->Pos.x); pt[2].y = tempImage->BitmapToCanvasY(pd->Pos.y)-tempImage->MarginY; LineTo(dc, pt[2].x, pt[2].y); } } } } if (Method==0) { pt[2].x = tempImage->BitmapToCanvasX(First.x); pt[2].y = tempImage->BitmapToCanvasY(First.y)-tempImage->MarginY; LineTo(dc, pt[2].x, pt[2].y); } else { pd = (TWAPointData *)PointList->First(); pt[2].x = tempImage->BitmapToCanvasX(pd->Pos.x); pt[2].y = tempImage->BitmapToCanvasY(pd->Pos.y)-tempImage->MarginY; LineTo(dc, pt[2].x, pt[2].y); } } SelectObject(dc, hOldPen); DeleteObject(hPen); SetBkColor(dc, clOldBk); SelectObject(dc, hOldBrush); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::IrregularClose(TObject *Sender) { BEGIN_LOG("::"); cbIrreCurve->Checked = false; SetBitmapRegion(); if (wantedColorClick) { newgroupingUndo->do_(UT_WORKAREA, 1); UndoBtn->Enabled = true;} else { newgroupingUndo->do_(UT_WORKAREA, 0); UndoBtn->Enabled = true;} WADraw(-2); ResetPointList(); Step = 0; END_LOG; } //--------------------------------------------------------------------------- /* SetBitmapRegion()¿¡¼­ SetMask()¸¦ ÇÔÀ¸·Î½á ÀÛ¾÷±¸¿ªÀ» MAsk·Î Àâ¾ÆÁØ´Ù. WorkAreaÀÇ MaskÀ» °¡Áö°í ¿Í¼­ ±× ±¸¿ª¿¡ ÀÖ´Â ºÎºÐ¸¸ Fill ColorÇÑ´Ù. ¿©±â¼­ PreviewBitmapÀÇ ¸ðµç ºÎºÐÀ» ó¸®ÇÒ Çʿ䰡 ¾ø±â ¶§¹®¿¡ Range¸¦ ¾ò¾î¿Í¼­ ±× ºÎºÐ¸¸ Àаí ó¸®ÇÑ´Ù. ---------------------------------------------------------------------------*/ void __fastcall TNewGroupingForm::IrregularFillColor() { BEGIN_LOG("::"); if (IrregularColorList->Count<0) { END_LOG; return; } Byte *pMask, *pPreview; Byte sb, sg, sr, tb, tg, tr; Byte items_red = 0, items_green = 0, items_blue = 0; int x, y; RECT fillRange = WorkArea->Range; int fillWidth = fillRange.right - fillRange.left; int fillHeight = fillRange.bottom - fillRange.top; tb=(targetColor>>16) & 0xff; tg=(targetColor>>8) & 0xff; tr=targetColor & 0xff; previewBitmap->StartScanLine(); WorkArea->Mask->StartScanLine(); if (irregular_sTOsBtn->Down) { sb=(sourceColor>>16) & 0xff; sg=(sourceColor>>8) & 0xff; sr=sourceColor & 0xff; for (y = 0; y < fillHeight; y++ ) { pPreview = previewBitmap->GetScanLine(y + fillRange.top, fillRange.left, fillWidth) + 3 * fillRange.left; pMask = WorkArea->Mask->GetScanLine(y); // 1 bit mask°¡ µÇ¾ú´Ù ¶Ç´Â ¾Æ´Ï´Ù (on/off) for (x = 0; x < fillWidth; x++ ) { // 24 bits ÇϳªÀÇ »öÀ» Ç¥Çö(8, 8, 8) if (pMask[x >> 3] & (0x80 >> (x & 7))) { // x>>3 == x/8, x&7={0,1,2,3,4,5,6,7} if (pPreview[0]==sb && pPreview[1]==sg && pPreview[2]==sr) { pPreview[0]=tb; pPreview[1]=tg; pPreview[2]=tr; } } pPreview += 3; } previewBitmap->PutScanLine(y + fillRange.top, fillRange.left, fillWidth); } } else { for (y = 0; y < fillHeight; y++ ) { pPreview = previewBitmap->GetScanLine(y + fillRange.top, fillRange.left, fillWidth) + 3 * fillRange.left; pMask = WorkArea->Mask->GetScanLine(y); // 1 bit mask°¡ µÇ¾ú´Ù ¶Ç´Â ¾Æ´Ï´Ù (on/off) for (x = 0; x < fillWidth; x++ ) { // 24 bits ÇϳªÀÇ »öÀ» Ç¥Çö(8, 8, 8) if (pMask[x >> 3] & (0x80 >> (x & 7))) { // x>>3 == x/8, x&7={0,1,2,3,4,5,6,7} for (int i=0; iCount; i++) { items_red = (Byte)(*(TColor*)(IrregularColorList->Items[i])) & 0xFF; items_green = (Byte)(*((TColor*)(IrregularColorList->Items[i])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(IrregularColorList->Items[i])) >> 16) & 0xFF; if ( pPreview[2] == items_red && pPreview[1] == items_green && pPreview[0] == items_blue ) { pPreview[0]=tb; pPreview[1]=tg; pPreview[2]=tr; } } } pPreview += 3; } previewBitmap->PutScanLine(y + fillRange.top, fillRange.left, fillWidth); } } previewBitmap->StopScanLine(); WorkArea->Mask->StopScanLine(); Image->Repaint(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::multiChangeGetColor(RECT imageRect, TList *ListOfColor, TList *ListOfShape) { BEGIN_LOG("::"); Byte *bp; int ix, iy, check=0; TUnionBitmap *theBitmap = Image->uBitmap; Byte temp_red = 0, temp_green = 0, temp_blue = 0; Byte items_red = 0, items_green = 0, items_blue = 0; imageRect = correctRect(imageRect); if(imageRect.left<0) imageRect.left = 0; if(imageRect.top<0) imageRect.top = 0; if(imageRect.right>=theBitmap->Width) imageRect.right = theBitmap->Width - 1; if(imageRect.bottom>=theBitmap->Height) imageRect.bottom = theBitmap->Height - 1; theBitmap->StartScanLine(); for (iy=imageRect.top; iyGetScanLine(iy) + 3*imageRect.left; for (ix=imageRect.left; ixCount == 0 ) { TColor *cp = new TColor; *cp = (TColor)((temp_blue << 16) + (temp_green << 8) + temp_red); if (wantedColorClick && *cp==0xFFFFFF) continue; else multiAddShapeList(cp, ListOfColor, ListOfShape); } else { for (int i=0; iCount; i++) { items_red = (Byte)(*(TColor*)(ListOfColor->Items[i])) & 0xFF; items_green = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 16) & 0xFF; if ( temp_red == items_red && temp_green == items_green && temp_blue == items_blue ) check++; } if (check == 0) { TColor *cp = new TColor; // ÀÏ¹Ý »ç¿ëÀ» À§ÇÑ color pointer *cp = (TColor)((temp_blue << 16) + (temp_green << 8) + temp_red); if (wantedColorClick && *cp==0xFFFFFF) continue; else multiAddShapeList(cp, ListOfColor, ListOfShape); } check = 0; } // else } // for ix } // for iy temp_red = 0; temp_green = 0; temp_blue = 0; items_red = 0; items_green = 0; items_blue = 0; theBitmap->StopScanLine(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::groupingGetColor() { BEGIN_LOG("::"); Byte *bp; int ix, iy, check=0; Byte temp_red = 0, temp_green = 0, temp_blue = 0; Byte items_red = 0, items_green = 0, items_blue = 0; previewBitmap->StartScanLine(); for (iy=0; iyHeight; iy++) { bp = previewBitmap->GetScanLine(iy); for (ix=0; ixWidth; ix++, bp+=3) { temp_red = bp[2]; temp_green = bp[1]; temp_blue = bp[0]; if (AfterGroupingColorList->Count == 0 ) { TColor *cp = new TColor; *cp = (TColor)((temp_blue << 16) + (temp_green << 8) + temp_red); afterGroupingAddShape(cp, AfterGroupingColorList, AfterGroupingShapeList); } else { for (int i=0; iCount; i++) { items_red = (Byte)(*(TColor*)(AfterGroupingColorList->Items[i])) & 0xFF; items_green = (Byte)(*((TColor*)(AfterGroupingColorList->Items[i])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(AfterGroupingColorList->Items[i])) >> 16) & 0xFF; if ( temp_red == items_red && temp_green == items_green && temp_blue == items_blue ) check++; } if (check == 0) { TColor *cp = new TColor; // ÀÏ¹Ý »ç¿ëÀ» À§ÇÑ color pointer *cp = (TColor)((temp_blue << 16) + (temp_green << 8) + temp_red); afterGroupingAddShape(cp, AfterGroupingColorList, AfterGroupingShapeList); } check = 0; } // else } // for ix } // for iy temp_red = 0; temp_green = 0; temp_blue = 0; items_red = 0; items_green = 0; items_blue = 0; previewBitmap->StopScanLine(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::multiChangeDelColor(RECT imageRect, TList *ListOfColor, TList *ListOfShape) { BEGIN_LOG("::"); Byte *bp; TUnionBitmap *theBitmap = Image->uBitmap; int ix, iy; Byte temp_red = 0, temp_green = 0, temp_blue = 0; Byte items_red = 0, items_green = 0, items_blue = 0; imageRect = correctRect(imageRect); if(imageRect.left<0) imageRect.left = 0; if(imageRect.top<0) imageRect.top = 0; if(imageRect.right>=theBitmap->Width) imageRect.right = theBitmap->Width - 1; if(imageRect.bottom>=theBitmap->Height) imageRect.bottom = theBitmap->Height - 1; theBitmap->StartScanLine(); for (iy=imageRect.top; iyGetScanLine(iy) + 3*imageRect.left; for (ix=imageRect.left; ixCount; i++) { items_red = (Byte)(*(TColor*)(ListOfColor->Items[i])) & 0xFF; items_green = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 16) & 0xFF; if ( temp_red == items_red && temp_green == items_green && temp_blue == items_blue ) { multiExitRemoveColor(i, ListOfColor, ListOfShape); } } // for i } // for ix } // for iy temp_red = 0; temp_green = 0; temp_blue = 0; items_red = 0; items_green = 0; items_blue = 0; theBitmap->StopScanLine(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::multiExitRemoveColor(int i, TList *ListOfColor, TList *ListOfShape) { BEGIN_LOG("::"); TColor *cp; TShape *sh; if(i!=-1){ cp = (TColor *)ListOfColor->Items[i]; ListOfColor->Remove(cp); delete cp; sh = (TShape *)ListOfShape->Items[i]; ListOfShape->Remove(sh); delete sh; } ArrangeShape(ListOfShape); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::groupingAddShapeList(TColor *cp, TList *ListOfColor, TList *ListOfShape, TList *ListOfLabel) { BEGIN_LOG("::"); TShape *sh = new TShape(this); Byte temp_red = 0, temp_green = 0, temp_blue = 0; Byte items_red = 0, items_green = 0, items_blue = 0; int check=0; if(functionMenu.getCurrentFunction() == FUNC_GROUPING) { // Grouping¿¡¼­ °°Àº »öÀ» ¼±ÅÃÇÏ¸é ¸®ÅÏÇÏ´Â ºÎºÐ temp_red = *cp & 0xFF; temp_green = (*cp >> 8) & 0xFF; temp_blue = (*cp >> 16) & 0xFF; for (int i=0; iCount; i++) { items_red = (Byte)(*(TColor*)(ListOfColor->Items[i])) & 0xFF; items_green = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 16) & 0xFF; if ( temp_red == items_red && temp_green == items_green && temp_blue == items_blue ) check++; } if (check>0) { delete cp; END_LOG; return; } sh->Parent = groupingColorBox; groupingColorBox->DoubleBuffered = true; ListOfColor->Add(cp); sh->Top = groupingColorShape->Top+(ListOfShape->Count/8)*(groupingColorShape->Height+11); sh->Left = groupingColorShape->Left+(ListOfShape->Count%8)*(groupingColorShape->Width+3); sh->Width = groupingColorShape->Width; sh->Height = groupingColorShape->Height; sh->Brush->Color = *cp; sh->OnMouseUp = sh0_testMouseUp; ListOfShape->Add(sh); if (ListOfShape->Count > 12) groupingColorBox->VertScrollBar->Visible=true; TLabel *lb = new TLabel(this); lb->Parent = groupingColorBox; lb->Top = sh->Top-10; lb->Left = gbColorLabel->Left+(ListOfLabel->Count%8)*(gbColorLabel->Width+3); lb->Width = gbColorLabel->Width; lb->Height = gbColorLabel->Height; lb->AutoSize = false; lb->Alignment = taCenter; lb->Font->Size = 6; lb->Caption = IntToStr(ListOfShape->Count); ListOfLabel->Add(lb); } else if(functionMenu.getCurrentFunction() == FUNC_HALFTONE) { sh->Parent = pnHalftonePalette; pnHalftonePalette->DoubleBuffered = true; ListOfColor->Add(cp); sh->Top = Halftone_Shape->Top+(ListOfShape->Count/8)*(Halftone_Shape->Height+3); sh->Left = Halftone_Shape->Left+(ListOfShape->Count%8)*(Halftone_Shape->Width+3); sh->Width = Halftone_Shape->Width; sh->Height = Halftone_Shape->Height; sh->Brush->Color = *cp; sh->OnMouseUp = sh0_testMouseUp; ListOfShape->Add(sh); if (ListOfShape->Count > 12) groupingColorBox->VertScrollBar->Visible=true; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::afterGroupingAddShape(TColor *cp, TList *ListOfColor, TList *ListOfShape) { BEGIN_LOG("::"); TShape *sh = new TShape(this); TShape *bgSh = new TShape(this); Byte temp_red = 0, temp_green = 0, temp_blue = 0; Byte items_red = 0, items_green = 0, items_blue = 0; int check=0; sh->Parent = ColorInImagePalette; bgSh->Parent = ColorInImagePalette; ColorInImagePalette->DoubleBuffered = true; ListOfColor->Add(cp); sh->Top = ColorInImageShape->Top+(ListOfShape->Count/6)*(ColorInImageShape->Height+10); sh->Left = ColorInImageShape->Left+(ListOfShape->Count%6)*(ColorInImageShape->Width+6); sh->Width = ColorInImageShape->Width; sh->Height = ColorInImageShape->Height; sh->Brush->Color = *cp; sh->OnMouseDown = ColorInImageShapeMouseUp; bgSh->Top = sh->Top-5; bgSh->Left = sh->Left; bgSh->Width = bgColorInImageShape->Width; bgSh->Height = bgColorInImageShape->Height; bgSh->Brush->Color = clWhite; bgSh->Pen->Color = clBlack; bgSh->SendToBack(); ListOfShape->Add(sh); AfterBgGroupingShapeList->Add(bgSh); if (ListOfShape->Count>12) ColorInImagePalette->VertScrollBar->Visible=true; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::multiAddShapeList(TColor *cp, TList *ListOfColor, TList *ListOfShape) { BEGIN_LOG("::"); TShape *sh = new TShape(this); ListOfColor->Add(cp); if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR) { if (ColorChangeControl->ActivePage == PenTabSheet) { sh->Parent = mSPenPanel; mSPenPanel->DoubleBuffered = true; } else { sh->Parent = singleIrregularPanel; singleIrregularPanel->DoubleBuffered = true; } sh->Top = color_test->Top+(ListOfShape->Count/6)*(color_test->Height+2); sh->Left = color_test->Left+(ListOfShape->Count%6)*(color_test->Width+2); } else if (functionMenu.getCurrentFunction() == FUNC_FILTERING) { sh->Parent = filterColorPanel; filterColorPanel->DoubleBuffered = true; sh->Top = color_test->Top+(ListOfShape->Count/5)*(color_test->Height+3); sh->Left = color_test->Left+(ListOfShape->Count%5)*(color_test->Width+3); } sh->Width=color_test->Width; sh->Height=color_test->Height; sh->Brush->Color = *cp; sh->OnMouseUp=sh0_testMouseUp; ListOfShape->Add(sh); if (ListOfShape->Count > 12) { mSPenPanel->VertScrollBar->Visible=true; singleIrregularPanel->VertScrollBar->Visible=true; filterColorPanel->VertScrollBar->Visible=true; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::StatusIrregular() { BEGIN_LOG("::"); if (Item==NG_IRREGULAR) { sbIrreDelete->Enabled = PointList->Count>0; closeButton->Enabled = PointList->Count>2; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::IrregularMouseDown(TMouseButton Button, int X, int Y) { BEGIN_LOG("::"); TRect r; double length; //lhskys ±æÀ̸¦ ÀÌ¿ëÇϱâ À§Çؼ­ double dx,dy,lx,ly; //lhskys x,yÀÇ º¯È­·® if (Button==mbLeft) { if (Step>0) { if ( cbIrreCurve->Checked) { if (Step==23) { // step=23 ÀÌ¸é ¸¶¿ì½º°¡ µÎ¹øÂ° ¹öưÀÌ ´­·ÈÀ» ¶§ ½ÇÇà Second = Point(X, Y); PushPointList(true, First, Second); cbIrreCurve->Enabled = true; Step = 22; Second=First; //lhskys °î¼±¿¡¼­ first ¿Í second ÀÇ ÀÚ¸®¹Ù²Þ } else { First = Point(X, Y); cbIrreCurve->Enabled = false; Step = 23; } } else { if( Item==NG_IRREGULAR && pressZ==1 ) {//lhskys zŰ Ŭ¸¯ int x1,x2,y1,y2; // °¢µµ üũ x1=X; // ¹× x2=Second.x; // ±×¸®±â y1=Y; y2=Second.y; if((y2-y1>=x2-x1)&&(y2-y1>=x1-x2)) X=Second.x; if((y2-y1>=x2-x1)&&(y2-y1<=x1-x2)) Y=Second.y; if((y2-y1<=x2-x1)&&(y2-y1>=x1-x2)) // y = x ±âÁØÀ¸·Î Y=Second.y; if((y2-y1<=x2-x1)&&(y2-y1<=x1-x2)) X=Second.x; pressZ=0; } First = Point(X, Y); Second = First; PushPointList(false, First, Second); Step = 21; } } else { if (rbSet->Checked) ResetBitmapRegion(); First = Point(X, Y); Second = First; StatusItem(); PushPointList(false, First, Second); cbIrreCurve->Enabled = true; Step = 21; } StatusIrregular(); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::IrregularMouseMove(TShiftState Shift, int X, int Y) { BEGIN_LOG("::"); if (Step>0) { if (Shift.Contains(ssLeft)) { if (cbIrreCurve->Checked==false) { First = Point(X,Y); //lhskys if ((abs(First.x-Second.x)+ abs(First.y-Second.y)>6) && pressZ != 1) { PushPointList(false, Second, First); //lhskys Second, FirstÀ§Ä¡±³È¯ WADraw(-1); StatusIrregular(); Second = First; } } } else { if (Step==23) { Second = Point(X, Y); //°î¼± WADraw(-4); } else { First = Point(X, Y); WADraw(-2); } if (Step==21) Step = 22; } } StatusIrregular(); if(PointList->Count>2) sbOff->Enabled = false; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::IrregularMouseUp(TShiftState Shift, int X, int Y) { } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RectangleMouseDown(TMouseButton Button, int X, int Y) { BEGIN_LOG("::"); if (Button==mbLeft) { if (Step>0) { Second = Point(X, Y); SetBitmapRegion(); if (wantedColorClick) { newgroupingUndo->do_(UT_WORKAREA, 1); UndoBtn->Enabled = true;} else { newgroupingUndo->do_(UT_WORKAREA, 0); UndoBtn->Enabled = true;} Image->Invalidate(); Step = 0; } else { if (rbSet->Checked) ResetBitmapRegion(); First = Point(X, Y); Second = First; Step = 11; } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RectangleMouseMove(int X, int Y) { BEGIN_LOG("::"); String str; int lx, ly, sx, sy, dx, dy; TSize size; if (Step>0) { Second = Point(X, Y); dx = First.x - Second.x; dy = First.y - Second.y; str = returnSize(abs(dx), abs(dy)); lbShape->Caption = String(IDS_COMMON_SIZE) + " : " + str + MainImageForm->UnitName(); MainImageForm->TempLabel->Caption = str; lx = Second.x-First.x; ly = Second.y-First.y; size.cx = MainImageForm->TempLabel->Width; size.cy = MainImageForm->TempLabel->Height; sx = Image->BitmapToCanvasX(Second.x); sy = Image->BitmapToCanvasY(Second.y); if (ly>0) { //ÀÛ¾÷±¸¿ª sizeÇ¥½Ã À§Ä¡ º¯°æ sy = sy+5; if(Second.y + size.cy > Image->uBitmap->Height){ sy = Image->BitmapToCanvasY(Second.y); sy = sy-5-size.cy; } } else { sy = sy-5-size.cy; if(sy < 0){ sy = Image->BitmapToCanvasY(Second.y); sy = sy+5; } } if (lx>0){ sx = sx+5; if(Second.x + size.cx > Image->uBitmap->Width){ sx = Image->BitmapToCanvasX(Second.x); sx = sx-5-size.cx; } }else { sx = sx-5-size.cx; if(sx < 0){ sx = Image->BitmapToCanvasX(Second.x); sx = sx+5; } } MainImageForm->TempLabel->Left = sx; MainImageForm->TempLabel->Top = sy; WADraw(0); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::PaintDirectly(HDC dcDst, int px, int py, int vw, int vh) { BEGIN_LOG("::"); if(Image->OnPaintZoom) Image->OnPaintZoom(Image, dcDst); if(Image->OnPaintLocate) Image->OnPaintLocate(Image, dcDst); if(!isPaintDirectlyClean){ if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR) { if(!isFirst && Image->OnPaintCursor) Image->OnPaintCursor(Image, dcDst, Pen.x, Pen.y); } else if (functionMenu.getCurrentFunction() == FUNC_FILTERING && UsingPenRemoveBtn->Down ) { if(!isFirst /* && Image->OnPaintCursor*/ ) Image->OnPaintCursor(Image, dcDst, Pen.x, Pen.y); } if (Image->OnPaintZoom) Image->OnPaintZoom(Image, dcDst); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ResetPointList() { BEGIN_LOG("::"); TWAPointData *pd; while (PointList->Count>0) { pd = (TWAPointData *)PointList->Last(); PointList->Remove(pd); delete pd; } closeButton->Enabled = false; sbIrreDelete->Enabled = false; END_LOG; } //--------------------------------------------------------------------------- bool __fastcall TNewGroupingForm::PushPointList(bool curve, TPoint pos, TPoint apex) { BEGIN_LOG("::"); TWAPointData *pd; if ((pd = new TWAPointData)==NULL) { END_LOG; return false; } pd->Curve = curve; pd->Pos = pos; pd->Apex = apex; PointList->Add(pd); END_LOG; return true; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::PopPointList() { BEGIN_LOG("::"); TWAPointData *pd; pd = (TWAPointData *)PointList->Last(); PointList->Remove(pd); delete pd; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::WADraw(int m) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() == FUNC_WORKAREA) Method = m; if (functionMenu.getCurrentFunction() == FUNC_FILTERING && (nooseBtn->Down || nooseBtn1->Down)) Method = m; Image->Invalidate(); TPItemImage *tempImage = Image; double ratio=tempImage->ZoomOut/tempImage->ZoomIn; int minx, miny, maxx, maxy; TWAPointData *pd; minx=maxx=Second.x; miny=maxy=Second.y; for (int i=0; i< PointList->Count; i++) { pd = (TWAPointData *)PointList->Items[i]; //=================== 2001.3.27. lhskys C++Builder 5 ¿¡¼­ int Ãß°¡... minx=min(minx,(int)pd->Pos.x); maxx=max(maxx,(int)pd->Pos.x); miny=min(miny,(int)pd->Pos.y); maxy=max(maxy,(int)pd->Pos.y); minx=min(minx,(int)pd->Apex.x); maxx=max(maxx,(int)pd->Apex.x); miny=min(miny,(int)pd->Apex.y); maxy=max(maxy,(int)pd->Apex.y); } minx=min(minx,(int)First.x); maxx=max(maxx,(int)First.x); miny=min(miny,(int)First.y); maxy=max(maxy,(int)First.y); //============================================== static RECT oldrc=Rect(minx-ratio*1-1,miny-ratio*1-1,maxx+ratio*1+1,maxy+ratio*1+1); Image->RectPaint(oldrc, true); oldrc=Rect(minx-ratio*1-1,miny-ratio*1-1,maxx+ratio*1+1,maxy+ratio*1+1); Image->Invalidate(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::SetBitmapRegion() { BEGIN_LOG("::"); TCursor cursor; TPItemImage *tempImage; pBITMAPHANDLE bh; RGNXFORM XForm; HRGN rgnSrc, rgnDst; HDC dc; TWAPointData *pd; TPoint pt[3]; int i; int diff = abs(First.x-Second.x) - abs(First.y-Second.y); RECT rc; bool sw = false; XFORM xForm; DWORD dwSize; double r, h, l, s; RGBQUAD rgb; cursor = Screen->Cursor; Screen->Cursor = crHourGlass; tempImage = Image; bh = tempImage->uBitmap->RgnBitmap->Handle; // convert by celberus XForm.uViewPerspective = TOP_LEFT; XForm.nXScalarNum = 1; XForm.nXScalarDen = 1; XForm.nYScalarNum = 1; XForm.nYScalarDen = 1; XForm.nXOffset = 0; XForm.nYOffset = 0; switch (Item) { case NG_SHAPE: if (SubItem==NG_CIRCLE || SubItem==NG_SQUARE){ //by jeegeo if (diff > 0) { if (First.x>Second.x) { Second.x+=diff; } else { Second.x-=diff; } } else { if (First.y>Second.y) { Second.y-=diff; } else { Second.y+=diff; } } } rc.left = min(First.x, Second.x); rc.top = min(First.y, Second.y); rc.right = max(First.x, Second.x)+1;//ÀåÁø¸¸: +1ÀÌ ¿ÖÇÊ¿äÇÑÁö? rc.bottom = max(First.y, Second.y)+1; // rc.right = max(First.x, Second.x); // rc.bottom = max(First.y, Second.y); if (SubItem==NG_ELLIPSE || SubItem==NG_CIRCLE) { //by jeegeo if (L_BitmapHasRgn(bh)) { if (rbSubtraction->Checked) { L_SetBitmapRgnEllipse(bh, &XForm, &rc, L_RGN_ANDNOTRGN); } else { L_SetBitmapRgnEllipse(bh, &XForm, &rc, L_RGN_OR); } } else { L_SetBitmapRgnEllipse(bh, &XForm, &rc, L_RGN_SET); } } else { if (L_BitmapHasRgn(bh)) { if (rbSubtraction->Checked) { L_SetBitmapRgnRect(bh, &XForm, &rc, L_RGN_ANDNOTRGN); } else { L_SetBitmapRgnRect(bh, &XForm, &rc, L_RGN_OR); } } else { L_SetBitmapRgnRect(bh, &XForm, &rc, L_RGN_SET); } } sw = true; break; case NG_IRREGULAR: dc = GetDC(hWnd);//0); //shin 070327 Vista¿¡¼± GetDC(NULL)ÇÏ¸é ¾ÈµÊ. (¾Æ¹« DC³ª ¸¸µé¾îÁÖ¸é ´Ù µÊ) if (dc) { BeginPath(dc); pd = (TWAPointData *)PointList->First(); pt[2].x = pd->Pos.x; pt[2].y = pd->Pos.y; MoveToEx(dc, pt[2].x, pt[2].y, NULL); if (PointList->Count>1) { for (i=1; i<=PointList->Count-1; i++) { pd = (TWAPointData *)PointList->Items[i]; pt[2].x = pd->Pos.x; pt[2].y = pd->Pos.y; if (pd->Curve) { pt[0].x = pd->Apex.x; pt[0].y = pd->Apex.y; pt[1] = pt[0]; PolyBezierTo(dc, pt, 3); } else { LineTo(dc, pt[2].x, pt[2].y); } } } CloseFigure(dc); EndPath(dc); rgnSrc = PathToRegion(dc); ReleaseDC(0, dc); if (L_BitmapHasRgn(bh)) { if (rbSubtraction->Checked) { L_SetBitmapRgnHandle(bh, &XForm, rgnSrc, L_RGN_ANDNOTRGN); } else { L_SetBitmapRgnHandle(bh, &XForm, rgnSrc, L_RGN_OR); } } else { L_SetBitmapRgnHandle(bh, &XForm, rgnSrc, L_RGN_SET); } DeleteObject(rgnSrc); sw = true; } break; } if (sw) { L_GetBitmapRgnHandle(bh, &XForm, &rgnDst); WorkArea->SetMask(rgnDst); DeleteObject(rgnDst); tempImage->OutlineBitmapRgn(WorkArea->bComplex); tempImage->Repaint(); if (rbSet->Checked==false) { Number++; if (Number>=999) { MessageDlg(IDS_MESSAGE_NOSETWINDOW, mtInformation, TMsgDlgButtons() << mbYes, 0); rbSet->Checked = true; Number = 0; } } else { Number = 1; } StatusItem(); } Screen->Cursor = cursor; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ResetBitmapRegion() { BEGIN_LOG("::"); TPItemImage *tempImage; pBITMAPHANDLE bh; RGNXFORM XForm; RECT rc; tempImage = Image; bh = tempImage->uBitmap->RgnBitmap->Handle; if (L_BitmapHasRgn(bh)) { XForm.uViewPerspective = TOP_LEFT; XForm.nXScalarNum = 1; XForm.nXScalarDen = 1; XForm.nYScalarNum = 1; XForm.nYScalarDen = 1; XForm.nXOffset = 0; XForm.nYOffset = 0; L_GetBitmapRgnBounds(bh, &XForm, &rc); L_FreeBitmapRgn(bh); WorkArea->SetMask(NULL); InvalidateRect(Image->Parent->Handle, &rc, false); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RatioZoom(int r) //by qe and GreenFish { BEGIN_LOG("::"); int a, b; a = r / 100; b = r % 100; GetCursorPos(&ptScreen); //¸¶¿ì½º Ä¿¼­ÀÇ À§Ä¡¸¦ ÀԷ¹޴´Ù. ZoomChange(a, b, &ptScreen); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::SetZoom() { BEGIN_LOG("::"); switch (Image->ZoomIn) { case 1: switch (Image->ZoomOut) { case 1: ZoomTrackBar->Position = 8; break; case 2: ZoomTrackBar->Position = 6; break; case 3: ZoomTrackBar->Position = 5; break; case 4: ZoomTrackBar->Position = 4; break; case 6: ZoomTrackBar->Position = 3; break; case 8: ZoomTrackBar->Position = 2; break; case 12: ZoomTrackBar->Position = 1; break; case 16: ZoomTrackBar->Position = 0; break; } break; case 2: switch (Image->ZoomOut) { case 1: ZoomTrackBar->Position = 10; break; case 3: ZoomTrackBar->Position = 7; break; } break; case 3: switch (Image->ZoomOut) { case 1: ZoomTrackBar->Position = 11; break; case 2: ZoomTrackBar->Position = 9; break; } break; case 4: ZoomTrackBar->Position = 12; break; case 6: ZoomTrackBar->Position = 13; break; case 8: ZoomTrackBar->Position = 14; break; case 12: ZoomTrackBar->Position = 15; break; case 16: ZoomTrackBar->Position = 16; break; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbGroupingClick(TObject *Sender) { BEGIN_LOG("::"); TCursor cur; cur = Screen->Cursor; Screen->Cursor = crHourGlass; //-ÇöÀç ÆÈ·¹Æ®¿¡ ÀÖ´Â »öÀ» ÀúÀåÇÑ´Ù.--------- if (GroupingColorList->Count>0) { ResetBackupList(backupGroupingColorList); ReplaceColorListTOBackup(GroupingColorList, backupGroupingColorList); } //------------------------------------------- newgroupingUndo->do_(UT_GROUP, 0); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ afterGrouping=grouping(previewBitmap, GroupingColorList, gStatusProgress); if (!existBluredImage) { TTexpiaBitmap *tBlurBitmap = new TTexpiaBitmap; tBlurBitmap->Create(originalBitmap->Width, originalBitmap->Height, originalBitmap->BitsPerPixel, originalBitmap->RGB); originalBitmap->CopyToTexpia(tBlurBitmap, 0, 0, originalBitmap->Width, originalBitmap->Height, 0, 0, SRCCOPY); L_SharpenBitmap(tBlurBitmap->Handle, -1000 ); // halftone¿¡ »ç¿ëÇÏ´Â BlurBitmap¿¡ unsharpenÀ» ÁØ´Ù. blurBitmap->Copy(0, 0, tBlurBitmap->Width, tBlurBitmap->Height, tBlurBitmap, 0, 0, SRCCOPY); delete tBlurBitmap; tBlurBitmap = NULL; existBluredImage = true; } Image->Repaint(); //------------------------------------------------------------------------- // palette panel¿¡ ÇöÀç image color¸¦ º¸¿©ÁÖ±â À§ÇÑ ºÎºÐ if (afterGrouping) { ColorInImagePanel->Visible = true; ResetShape(AfterGroupingColorList, AfterGroupingShapeList); ResetBgShape(AfterBgGroupingShapeList); groupingGetColor(); selectedColor = new bool[AfterGroupingColorList->Count]; for(int i=0; iCount; i++) selectedColor[i]=false; afterGrouping=false; fileteringButton->Enabled = true; colorChangeBtn->Enabled = true; workAreaBitBtn->Enabled = true; sbInitHalftone->Enabled = true; } //------------------------------------------------------------------------- UndoBtn->Enabled = true; Screen->Cursor = cur; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbHalftoneClick(TObject *Sender) { BEGIN_LOG("::"); TCursor cur; cur = Screen->Cursor; Screen->Cursor = crHourGlass; diffusion_loss = 1.0-tbDiffusionLoss->Position/10.0; if (wantedColorClick) { newgroupingUndo->do_(UT_HALFTONE, 1); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; gradation(tempBitmap, blurBitmap, WorkArea, HalftoneColorList); } else { newgroupingUndo->do_(UT_HALFTONE, 0); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; gradation(previewBitmap, blurBitmap, WorkArea, HalftoneColorList); } ResetShape(HalftoneColorList, HalftoneShapeList); if (wantedColorClick) wantedColorSpeedBtnClick(); else Image->Repaint(); Screen->Cursor = cur; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbInitGroupingClick(TObject *Sender) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() != FUNC_GROUPING) ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. functionMenu.setFunction(FUNC_GROUPING); ResetShape(GroupingColorList, GroupingShapeList); ResetGroupingColorLabel(GroupingColorNum); sbExit->Visible=true; initGroupingMenu(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbInitHalftoneClick(TObject *Sender) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() != FUNC_HALFTONE) ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. functionMenu.setFunction(FUNC_HALFTONE); sbExit->Visible=true; initHalftoneMenu(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ResetShape(TList *ListOfColor, TList *ListOfShape) { BEGIN_LOG("::"); TColor *cp; // by jeegeo while (ListOfColor->Count>0) { cp = (TColor *)ListOfColor->Last(); ListOfColor->Remove(cp); delete cp; } TShape *sh; // by jeegeo while (ListOfShape->Count>0) { sh = (TShape *)ListOfShape->Last(); ListOfShape->Remove(sh); delete sh; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ResetBgShape(TList *ListOfShape) { BEGIN_LOG("::"); TShape *sh; // by jeegeo while (ListOfShape->Count>0) { sh = (TShape *)ListOfShape->Last(); ListOfShape->Remove(sh); delete sh; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ResetGroupingColorLabel(TList *ListOfLabel) { BEGIN_LOG("::"); TLabel *lb; // by maxleo21c while (ListOfLabel->Count>0) { lb = (TLabel *)ListOfLabel->Last(); ListOfLabel->Remove(lb); delete lb; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ResetBackupList(TList *ListOfColor) { BEGIN_LOG("::"); TColor *cp; // by jeegeo while (ListOfColor->Count>0) { cp = (TColor *)ListOfColor->Last(); ListOfColor->Remove(cp); delete cp; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::FormResize(TObject *Sender) { BEGIN_LOG("::"); //»çÀÌÁî¿¡ ¸Â°Ô È­¸éÀ» ¹èÄ¡ÇØ¾ßÇÑ´Ù gbZoom->Left=ClientWidth-gbZoom->Width; gbImageSelect->Left=gbZoom->Left; gbFunction->Left=gbZoom->Left; sbExit->Left=gbZoom->Left; ColorChangeControl->Left=gbZoom->Left; pnGrouping->Left=gbZoom->Left; pnHalftone->Left=gbZoom->Left; WorkAreaPanel->Left=gbZoom->Left; pnHalftonePalette->Left=gbZoom->Left; filterPanel->Left=gbZoom->Left; finishButtonPanel->Left=gbZoom->Left+1; ColorInImagePanel->Left=gbZoom->Left+1; gbZoom->Top=20; gbImageSelect->Top=gbZoom->Top+gbZoom->Height; gbFunction->Top=gbImageSelect->Top+gbImageSelect->Height; sbExit->Top=gbFunction->Top+gbFunction->Height; ColorChangeControl->Top=sbExit->Top+sbExit->Height; filterPanel->Top=sbExit->Top+sbExit->Height; WorkAreaPanel->Top=sbExit->Top+sbExit->Height; pnHalftonePalette->Top=ColorChangeControl->Top; pnGrouping->Top=ColorChangeControl->Top; pnHalftone->Top=ColorChangeControl->Top; pnImage->Top=0; pnImage->Left=0; pnImage->Width=gbZoom->Left-sbVert->Width; pnImage->Height=ClientHeight-sbHorz->Height-gbStatusBar->Height; finishButtonPanel->Top=pnImage->Height-finishButtonPanel->Height; ColorInImagePanel->Top=finishButtonPanel->Top-ColorInImagePanel->Height-10; gbStatusBar->Top=ClientHeight-gbStatusBar->Height; sbVert->Top=0; sbVert->Left=pnImage->Width; sbVert->Height=pnImage->Height; sbHorz->Left=0; sbHorz->Top=pnImage->Height; sbHorz->Width=pnImage->Width; if (gStatusProgress) gStatusProgress->Resize(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sh0_testMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() == FUNC_FILTERING){ int i = FilterShapeList->IndexOf(Sender); TColor *cp; TShape *sh; if(i!=-1){ cp = (TColor *)FilterColorList->Items[i]; FilterColorList->Remove(cp); delete cp; sh = (TShape *)FilterShapeList->Items[i]; FilterShapeList->Remove(sh); delete sh; } ArrangeShape(FilterShapeList); } else if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR) { if (ColorChangeControl->ActivePage == PenTabSheet) { int i = PenShapeList->IndexOf(Sender); TColor *cp; TShape *sh; if(i!=-1){ cp = (TColor *)PenColorList->Items[i]; PenColorList->Remove(cp); delete cp; sh = (TShape *)PenShapeList->Items[i]; PenShapeList->Remove(sh); delete sh; } ArrangeShape(PenShapeList); } else { int i = IrregularShapeList->IndexOf(Sender); TColor *cp; TShape *sh; if(i!=-1){ cp = (TColor *)IrregularColorList->Items[i]; IrregularColorList->Remove(cp); delete cp; sh = (TShape *)IrregularShapeList->Items[i]; IrregularShapeList->Remove(sh); delete sh; } ArrangeShape(IrregularShapeList); } } else if (functionMenu.getCurrentFunction() == FUNC_GROUPING){ int i = GroupingShapeList->IndexOf(Sender); TColor *cp; TShape *sh; TLabel *lb; if(i!=-1){ cp = (TColor *)GroupingColorList->Items[i]; GroupingColorList->Remove(cp); delete cp; sh = (TShape *)GroupingShapeList->Items[i]; GroupingShapeList->Remove(sh); delete sh; lb = (TLabel *)GroupingColorNum->Items[i]; GroupingColorNum->Remove(lb); delete lb; } ArrangeShape(GroupingShapeList, GroupingColorNum); } else if (functionMenu.getCurrentFunction() == FUNC_HALFTONE){ int i = HalftoneShapeList->IndexOf(Sender); TColor *cp; TShape *sh; if(i!=-1){ cp = (TColor *)HalftoneColorList->Items[i]; HalftoneColorList->Remove(cp); delete cp; sh = (TShape *)HalftoneShapeList->Items[i]; HalftoneShapeList->Remove(sh); delete sh; } ArrangeShape(HalftoneShapeList); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ArrangeShape(TList *ListOfShape, TList *ListOfLabel) { BEGIN_LOG("::"); TShape *sh; if (functionMenu.getCurrentFunction() == FUNC_FILTERING){ for(int i=0;iCount;i++){ sh = (TShape *)ListOfShape->Items[i]; sh->Top = filter_Shape->Top+(i/5)*(filter_Shape->Height+3); sh->Left = filter_Shape->Left+(i%5)*(filter_Shape->Width+3); sh->Width = filter_Shape->Width; sh->Height = filter_Shape->Height; } } else if (functionMenu.getCurrentFunction() == FUNC_GROUPING) { TLabel *lb; for(int i=0;iCount;i++){ sh = (TShape *)ListOfShape->Items[i]; sh->Top = groupingColorShape->Top+(i/8)*(groupingColorShape->Height+11); sh->Left = groupingColorShape->Left+(i%8)*(groupingColorShape->Width+3); lb = (TLabel *)ListOfLabel->Items[i]; lb->Top = sh->Top-10; lb->Left = gbColorLabel->Left+(i%8)*(gbColorLabel->Width+3); lb->Caption = IntToStr(i+1); } } else if (functionMenu.getCurrentFunction() == FUNC_HALFTONE) { for(int i=0;iCount;i++){ sh = (TShape *)ListOfShape->Items[i]; sh->Top = Halftone_Shape->Top+(i/8)*(Halftone_Shape->Height+3); sh->Left = Halftone_Shape->Left+(i%8)*(Halftone_Shape->Width+3); } } else if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR){ if (ColorChangeControl->ActivePage == IrregularTabSheet) { for(int i=0;iCount;i++){ sh = (TShape *)ListOfShape->Items[i]; sh->Top = color_test->Top+(i/8)*(color_test->Height+2); sh->Left = color_test->Left+(i%8)*(color_test->Width+2); } } else { for(int i=0;iCount;i++){ sh = (TShape *)ListOfShape->Items[i]; sh->Top = pen_test->Top+(i/8)*(pen_test->Height+2); sh->Left = pen_test->Left+(i%8)*(pen_test->Width+2); } } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::fileteringButtonClick(TObject *Sender) { BEGIN_LOG("::"); if (functionMenu.getCurrentFunction() != FUNC_FILTERING) ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. functionMenu.setFunction(FUNC_FILTERING); ResetShape(FilterColorList, FilterShapeList); ResetGroupingColorLabel(GroupingColorNum); sbExit->Visible=true; initfileteringButton(); END_LOG; } //-------------------------------------------------------------------------- void __fastcall TNewGroupingForm::closeButtonClick(TObject *Sender) { BEGIN_LOG("::"); if (PointList->Count>2) { IrregularClose(this); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::cancelButtonClick(TObject *Sender) { BEGIN_LOG("::"); WADraw(-2); ResetPointList(); Step = 0; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::irregularAllBtnClick(TObject *Sender) { BEGIN_LOG("::"); RECT fullarea; fullarea.left = 0; fullarea.top = 0; fullarea.right = Image->uBitmap->Width; fullarea.bottom = Image->uBitmap->Height; ResetShape(IrregularColorList, IrregularShapeList); multiChangeGetColor(fullarea, IrregularColorList, IrregularShapeList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::pen_sTOsBtnClick(TObject *Sender) { BEGIN_LOG("::"); PenFormResize(); if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::penAllBtnClick(TObject *Sender) { BEGIN_LOG("::"); RECT fullarea; fullarea.left = 0; fullarea.top = 0; fullarea.right = Image->uBitmap->Width; fullarea.bottom = Image->uBitmap->Height; ResetShape(PenColorList, PenShapeList); multiChangeGetColor(fullarea, PenColorList, PenShapeList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::penClearBtnClick(TObject *Sender) { BEGIN_LOG("::"); TRadioButton *bt; bt = (TRadioButton *)Sender; if (bt==(TRadioButton *)gbClearlBtn) { ResetShape(GroupingColorList, GroupingShapeList); ResetGroupingColorLabel(GroupingColorNum); } else if (bt==(TRadioButton *)penClearBtn) ResetShape(PenColorList, PenShapeList); else if (bt==(TRadioButton *)irregularClearlBtn) ResetShape(IrregularColorList, IrregularShapeList); else if (bt==(TRadioButton *)filterColorClearBtn) ResetShape(FilterColorList, FilterShapeList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::irregular_sTOsBtnClick(TObject *Sender) { BEGIN_LOG("::"); WindowFormResize(); if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::filterColorAllBtnClick(TObject *Sender) { BEGIN_LOG("::"); RECT fullarea; fullarea.left = 0; fullarea.top = 0; fullarea.right = Image->uBitmap->Width; fullarea.bottom = Image->uBitmap->Height; ResetShape(FilterColorList, FilterShapeList); multiChangeGetColor(fullarea, FilterColorList, FilterShapeList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::filterColorLastBtnClick(TObject *Sender) { BEGIN_LOG("::"); ResetShape(FilterColorList, FilterShapeList); AllMenuLastBtnClick(backupFilterColorList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::penLastBtnClick(TObject *Sender) { BEGIN_LOG("::"); ResetShape(PenColorList, PenShapeList); AllMenuLastBtnClick(backupPenColorList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::irregularLastBtnClick(TObject *Sender) { BEGIN_LOG("::"); ResetShape(IrregularColorList, IrregularShapeList); AllMenuLastBtnClick(backupIrregularColorList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::filterRunBtnClick(TObject *Sender) { BEGIN_LOG("::"); TCursor cur; cur = Screen->Cursor; Screen->Cursor = crHourGlass; //-ÇöÀç ÆÈ·¹Æ®¿¡ ÀÖ´Â »öÀ» ÀúÀåÇÑ´Ù.--------------------------------------- if (FilterColorList->Count>0) { ResetBackupList(backupFilterColorList); ReplaceColorListTOBackup(FilterColorList, backupFilterColorList); } //------------------------------------------------------------------------- if (filterBigScaleBtn->Down) { if ( wantedColorClick ) { if (FilterColorList->Count>0) { newgroupingUndo->do_(UT_FILTER, 1); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; if (WorkArea->Mask) LabelingFilter(tempBitmap, FilterColorList, AfterGroupingColorList, RxSpinEdit1->Value, gStatusProgress, WorkArea); else LabelingFilter(tempBitmap, FilterColorList, AfterGroupingColorList, RxSpinEdit1->Value, gStatusProgress); } else Application->MessageBox(IDS_MSGBOXFILTERBIGSCALE.c_str(), L"Information", MB_OK); } else { if (FilterColorList->Count>0) { newgroupingUndo->do_(UT_FILTER, 0); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; if (WorkArea->Mask) LabelingFilter(previewBitmap, FilterColorList, AfterGroupingColorList, RxSpinEdit1->Value, gStatusProgress, WorkArea); else LabelingFilter(previewBitmap, FilterColorList, AfterGroupingColorList, RxSpinEdit1->Value, gStatusProgress); } else Application->MessageBox(IDS_MSGBOXFILTERBIGSCALE.c_str(), L"Information", MB_OK); } } // Á¶Á÷°¨ Á¦°Å ÇÊÅÍ else if (EraseOrganizationBtn->Down ) { if ( wantedColorClick ) { newgroupingUndo->do_(UT_FILTER, 1); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; if (WorkArea->Mask) EraseOrganizationWA(tempBitmap, GroupingColorList, WorkArea, gStatusProgress); else EraseOrganization(tempBitmap, GroupingColorList, gStatusProgress); } else { newgroupingUndo->do_(UT_FILTER, 0); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; if (WorkArea->Mask) EraseOrganizationWA(previewBitmap, GroupingColorList, WorkArea, gStatusProgress); else EraseOrganization(previewBitmap, GroupingColorList, gStatusProgress); } } // Outline Á¦°Å ÇÊÅÍ else if (EraseOutLineBtn->Down ) { if (wantedColorClick) { if (FilterColorList->Count == 1) { newgroupingUndo->do_(UT_FILTER, 1); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; if (WorkArea->Mask) EraseOutLineWA(tempBitmap, GroupingColorList, (TColor *)FilterColorList->Items[0], WorkArea); else EraseOutLine(tempBitmap, GroupingColorList, (TColor *)FilterColorList->Items[0], gStatusProgress); } else Application->MessageBox(IDS_MSGBOXFILTER.c_str(), L"Information", MB_OK); } else { if (FilterColorList->Count == 1) { newgroupingUndo->do_(UT_FILTER, 0); // ActionÀ» ÃëÇϱâ Àü¿¡ do_ UndoBtn->Enabled = true; if (WorkArea->Mask) EraseOutLineWA(previewBitmap, GroupingColorList, (TColor *)FilterColorList->Items[0], WorkArea); else EraseOutLine(previewBitmap, GroupingColorList, (TColor *)FilterColorList->Items[0], gStatusProgress); } else Application->MessageBox(IDS_MSGBOXFILTER.c_str(), L"Information", MB_OK); } } if (wantedColorClick) wantedColorSpeedBtnClick(true); else Image->Repaint(); Screen->Cursor = cur; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::Timer1000Timer(TObject *Sender) { BEGIN_LOG("::"); TDateTime Date1; Date1 = Now(); String S; DateTimeToString(S,"yyyy-mm-dd ampm hh-nn-ss",Date1.CurrentDateTime()); gbStatusBar->Panels->Items[5]->Text = S; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::groupingLastBtnClick(TObject *Sender) { BEGIN_LOG("::"); ResetShape(GroupingColorList, GroupingShapeList); ResetGroupingColorLabel(GroupingColorNum); AllMenuLastBtnClick(backupGroupingColorList); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::AllMenuLastBtnClick(TList *ListOfColor) { BEGIN_LOG("::"); Byte items_red = 0, items_green = 0, items_blue = 0; for (int i=0; iCount; i++) { items_red = (Byte)(*(TColor*)(ListOfColor->Items[i])) & 0xFF; items_green = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 16) & 0xFF; TColor *cp = new TColor; *cp = (TColor)((items_blue << 16) + (items_green << 8) + items_red); if (functionMenu.getCurrentFunction() == FUNC_FILTERING){ multiAddShapeList(cp, FilterColorList, FilterShapeList); filetrCounter++; } else if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR) { if (ColorChangeControl->ActivePage == PenTabSheet) { multiAddShapeList(cp, PenColorList, PenShapeList); penCounter++; } else { multiAddShapeList(cp, IrregularColorList, IrregularShapeList); irregularCounter++; } } else if (functionMenu.getCurrentFunction() == FUNC_GROUPING){ groupingAddShapeList(cp, GroupingColorList, GroupingShapeList, GroupingColorNum); groupingCounter++; } else if (functionMenu.getCurrentFunction() == FUNC_HALFTONE){ multiAddShapeList(cp, HalftoneColorList, HalftoneShapeList); } } items_red = 0; items_green = 0; items_blue = 0; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ReplaceColorListTOBackup(TList *ListOfColor, TList *ListOfBackup) { BEGIN_LOG("::"); Byte items_red = 0, items_green = 0, items_blue = 0; for (int i=0; iCount; i++) { items_red = (Byte)(*(TColor*)(ListOfColor->Items[i])) & 0xFF; items_green = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 8) & 0xFF; items_blue = (Byte)(*((TColor*)(ListOfColor->Items[i])) >> 16) & 0xFF; TColor *cp = new TColor; *cp = (TColor)((items_blue << 16) + (items_green << 8) + items_red); ListOfBackup->Add(cp); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::UndoBtnClick(TObject *Sender) { BEGIN_LOG("::"); ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. int returnValue; functionMenu.setFunction(FUNC_UNDO); // RedoBtn->Enabled = true; if (wantedColorClick) { if (newgroupingUndo->getUndoImage(newgroupingUndo->IndexOfUndo)) { returnValue=newgroupingUndo->undo(1); wantedColorSpeedBtnClick(); } else { if ( Application->MessageBox(IDS_NGMSGBOXUNDO.c_str(), L"Information", MB_YESNO) == IDYES ) returnPreviewBtnClick(this); else { END_LOG; return; } } } else { if (newgroupingUndo->getUndoImage(newgroupingUndo->IndexOfUndo)) { returnValue=newgroupingUndo->undo(1); previewBitmap->Copy(tempBitmap, SRCCOPY); } else returnValue=newgroupingUndo->undo(0); Image->Repaint(); } if (!wantedColorClick && returnValue==UT_GROUP) {//´Ü»öÀ¸·Î º¸ÀÏ ¶§¿¡´Â »öÁ¤¸®°¡ µÈ »óŸ¦ ÀǹÌÇϱ⠶§¹®¿¡ // checkColorInImage(); //Ä÷¯ÀÇ °¹¼ö¸¦ È®ÀÎ ÇÒ Çʿ䰡 ¾ø´Ù. if (checkColorInImage() && !newgroupingUndo->canundo()) {//50¹Ì¸¸ÀÇ »öÀ» °¡Áö°í ÀÖ´Â °æ¿ì // ¿­·Á ÀÖ´Â ¸ðµç ¸Þ´º¿Í ColorIn Image°¡ ´ÝÈ÷´Â ºÎºÐ ColorChangeControl->Visible = false; pnHalftonePalette->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = false; filterPanel->Visible = false; WorkAreaPanel->Visible = false; ColorInImagePanel->Visible = false; //-------------------------------------------------- fileteringButton->Enabled = false; colorChangeBtn->Enabled = false; workAreaBitBtn->Enabled = false; sbInitHalftone->Enabled = false; blurButton->Enabled = true; sbInitGrouping->Enabled = true; } /* // undo/redoÇÒ¶§ »ö¸¸ ÀúÀåÇÏÁö ¾Ê°í ÀÌ·¸°Ô ó¸®ÇÏ¸é ¼Óµµ°¡ ´À·ÁÁ® ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. // Å«»çÀÌÁî À̹ÌÁ óÀ½ºÎÅÍ ¸î°¡Áö »öÀ» »ç¿ëÇÏ´ÂÁö ã´Â °Íµµ ´À¸®Áö¸¸ // shape¸¦ Áö¿ì°í ´Ù½Ã ¸¸µé¶§µµ ¸¹ÀÌ ´À·ÁÁö°Ô µÈ´Ù. if (checkColorInImage()) { ResetShape(AfterGroupingColorList, AfterGroupingShapeList); ResetBgShape(AfterBgGroupingShapeList); groupingGetColor(); delete[] selectedColor; selectedColor = new bool[AfterGroupingColorList->Count]; for(int i=0; iCount; i++) selectedColor[i]=false; } */ } RedoBtn->Enabled = true; if ( newgroupingUndo->canundo() == false ) { UndoBtn->Enabled = false; existBluredImage = false; functionMenu.setFunction(FUNC_NONE); } Screen->Cursor=crArrow; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RedoBtnClick(TObject *Sender) { BEGIN_LOG("::"); ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. int returnValue; functionMenu.setFunction(FUNC_REDO); // UndoBtn->Enabled = true; if (wantedColorClick) { if (newgroupingUndo->getUndoImage(newgroupingUndo->IndexOfUndo+1)) { returnValue=newgroupingUndo->redo(1); wantedColorSpeedBtnClick(); } else { if ( Application->MessageBox(IDS_NGMSGBOXREDO.c_str(), L"Information", MB_YESNO) == IDYES ) returnPreviewBtnClick(this); else { END_LOG; return; } } } else { if (newgroupingUndo->getUndoImage(newgroupingUndo->IndexOfUndo+1)) { returnValue=newgroupingUndo->redo(1); previewBitmap->Copy(tempBitmap, SRCCOPY); } else returnValue=newgroupingUndo->redo(0); Image->Repaint(); } if (!wantedColorClick && returnValue==UT_GROUP) {//´Ü»öÀ¸·Î º¸ÀÏ ¶§¿¡´Â »öÁ¤¸®°¡ µÈ »óŸ¦ ÀǹÌÇϱ⠶§¹®¿¡ checkColorInImage(); //Ä÷¯ÀÇ °¹¼ö¸¦ È®ÀÎ ÇÒ Çʿ䰡 ¾ø´Ù. /* if (checkColorInImage()) { ResetShape(AfterGroupingColorList, AfterGroupingShapeList); ResetBgShape(AfterBgGroupingShapeList); groupingGetColor(); delete[] selectedColor; selectedColor = new bool[AfterGroupingColorList->Count]; for(int i=0; iCount; i++) selectedColor[i]=false; } */ } UndoBtn->Enabled = true; if ( newgroupingUndo->canredo() == false ) { RedoBtn->Enabled = false; functionMenu.setFunction(FUNC_NONE); } Screen->Cursor=crArrow; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ColorChangeControlChange(TObject *Sender) { BEGIN_LOG("::"); if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } if (ColorChangeControl->ActivePage == PenTabSheet) initColorChangePen(); else initColorChangeWindow(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbShapeClick(TObject *Sender) { BEGIN_LOG("::"); TSpeedButton *sb; sb = ( TSpeedButton *)Sender; ExitItem(); if (sb==sbShape) InitItem(NG_SHAPE); else if (sb==sbIrregular) InitItem(NG_IRREGULAR); END_LOG; } //--------------------------------------------------------------------------- // Undo/RedoºÎºÐÀ» ¼öÁ¤ÇÏÁö ¾Ê´ÂÀÌ»ó Off¹®Á¦¸¦ ÇØ°áÇÒ ¼ö°¡ ¾ø¾î¼­ ÀӽùæÆíÀ¸·Î // 󸮸¦ Çß´Ù. // ¹®Á¦Á¡: WorkArea°¡ ÀÖÀ» °æ¿ì Off¸¦ ´©¸¥ ÈÄ Undo¸¦ ÇÏ°í ´Ù½Ã Redo¸¦ Çϸé // WorkArea°¡ ¾ø¾îÁø »óÅ·ΠÀÖ¾î¾ß Çϴµ¥ WorkArea°¡ ±×´ë·Î ³²¾Æ ÀÖ´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. // ÀÓ½Ã󸮹æ¹ý: ³»ºÎÀûÀ¸·Î WorkArea¸¦ Full·Î ¸¸µé°í ´Ù½Ã Invert¸¦ ÇÑÈÄ Undo Save¸¦ // ÇØ¼­ ÇÁ·Î±×·¥ »óÀ¸·Î´Â 󸮵Ǵ °Íó·³ º¸ÀÌ°Ô Ã³¸®Çß´Ù. void __fastcall TNewGroupingForm::sbOffClick(TObject *Sender) { BEGIN_LOG("::"); if (WorkArea->Mask){ TPItemImage *tempImage; pBITMAPHANDLE bh; RGNXFORM XForm; RECT rc; HRGN rgn; tempImage = Image; bh = tempImage->uBitmap->RgnBitmap->Handle; ResetBitmapRegion(); XForm.uViewPerspective = TOP_LEFT; XForm.nXScalarNum = 1; XForm.nXScalarDen = 1; XForm.nYScalarNum = 1; XForm.nYScalarDen = 1; XForm.nXOffset = 0; XForm.nYOffset = 0; rc.left = 0; rc.top = 0; rc.right = Image->uBitmap->Width; rc.bottom = Image->uBitmap->Height; L_SetBitmapRgnRect(bh, &XForm, &rc, L_RGN_SET); L_GetBitmapRgnHandle(bh, &XForm, &rgn); WorkArea->SetMask(rgn); DeleteObject(rgn); Image->OutlineBitmapRgn(); WorkArea->InvertRegion(); if (wantedColorClick) { newgroupingUndo->do_(UT_WORKAREA, 1); UndoBtn->Enabled = true;} else { newgroupingUndo->do_(UT_WORKAREA, 0); UndoBtn->Enabled = true;} Image->Invalidate(); } ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::InitItem(NewWindowItem i) { BEGIN_LOG("::"); Item = i; switch (Item) { case NG_SHAPE: Image->OnPaintZoom = PaintZoomRectangle; pnIrregular->Visible = false; pnShape->Enabled = true; pnShape->Visible = true; pnShape->Top = 106; WorkAreaPanel->Height = 180; if(sbShapeRectangle->Down)SubItem = NG_RECTANGLE; if(sbShapeEllipse->Down)SubItem = NG_ELLIPSE; if(sbShapeSquare->Down)SubItem = NG_SQUARE; if(sbShapeCircle->Down)SubItem = NG_CIRCLE; sbShape->Down = true; break; case NG_IRREGULAR: Image->OnPaintZoom = PaintZoomIrregular; pnShape->Visible = false; pnIrregular->Enabled = true; pnIrregular->Visible = true; pnIrregular->Top = 106; WorkAreaPanel->Height = 162; StatusIrregular(); sbIrregular->Down = true; cbIrreCurve->Enabled = true; break; default: break; } StatusItem(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ExitItem() { BEGIN_LOG("::"); switch (Item) { case NG_SHAPE: Image->OnPaintZoom = NULL; if (Step>0) Step = 0; pnShape->Enabled = false; pnShape->Visible = false; break; case NG_IRREGULAR: Image->OnPaintZoom = NULL; if (Step>0) { ResetPointList(); Step = 0; } cbIrreCurve->Checked = false; cbIrreCurve->Enabled = false; pnIrregular->Enabled = false; pnIrregular->Visible = false; break; } Image->Repaint(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::StatusItem() { BEGIN_LOG("::"); sbOff->Enabled = false; if (WorkArea->Mask) sbOff->Enabled = true; if (WorkArea->StatusUndo()) { } else { } rbAddition->Enabled = Number>0; rbSubtraction->Enabled = Number>0; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbShapeSquareClick(TObject *Sender) { BEGIN_LOG("::"); TSpeedButton *sb; sb = ( TSpeedButton *)Sender; if (sb==sbShapeSquare) SubItem = NG_SQUARE; else if (sb==sbShapeRectangle) SubItem = NG_RECTANGLE; else if (sb==sbShapeCircle) SubItem = NG_CIRCLE; else if (sb==sbShapeEllipse) SubItem = NG_ELLIPSE; END_LOG; } //--------------------------------------------------------------------------- String __fastcall TNewGroupingForm::returnSize(int dx, int dy) { BEGIN_LOG("::"); String str; if (SubItem==NG_CIRCLE || SubItem==NG_SQUARE) dx=dy=min(dx,dy); //by jeegeo if (MainImageForm->CurrentUnit==uInch) { str = Format("%f x %f", OPENARRAY(TVarRec, ((fabs(dx)+1)/MainImageForm->CanvasInfor.DotsPerInch, (fabs(dy)+1)/MainImageForm->CanvasInfor.DotsPerInch))); } else if (MainImageForm->CurrentUnit==uCm) { str = Format("%f x %f", OPENARRAY(TVarRec, (2.54*(fabs(dx)+1)/MainImageForm->CanvasInfor.DotsPerInch, 2.54*(fabs(dy)+1)/MainImageForm->CanvasInfor.DotsPerInch))); } else { str = Format("%d x %d", OPENARRAY(TVarRec, (abs(dx)+1, abs(dy)+1))); } END_LOG; return str; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbIrreDeleteClick(TObject *Sender) { BEGIN_LOG("::"); DeleteClick = 1; //lhskys delete ¹öưÀ» ´­·¶À»¶§ if (Step==23) { //°ªÀ» ÁöÁ¤ z۸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï WADraw(-4); Step = 21; } else if (Step==22) { WADraw(-2); Step = 21; } else { WADraw(-1); } PopPointList(); if (PointList->Count>0) WADraw(-1); else Step = 0; StatusIrregular(); Image->Repaint(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::PenSizeChange(TObject *Sender) { BEGIN_LOG("::"); if (PenSize->Text.Length()>0) { try { PenSize->Text.ToInt(); if (PenSize->Value>50) PenSize->Value=50; if (PenSize->Value<1) PenSize->Value=1; } catch(EConvertError&) { PenSize->Value = 12; } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ColorInImageShapeMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { BEGIN_LOG("::"); if ( !wantedColorClick ) { for (int j=0; jCount; j++) { if ( ((TShape *)AfterBgGroupingShapeList->Items[j])->Brush->Color == clRed ) ((TShape *)AfterBgGroupingShapeList->Items[j])->Brush->Color = clWhite; } if (functionMenu.getCurrentFunction() == FUNC_GROUPING) initGroupingMenu(); else if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR) initColorChangeBtn(); blurButton->Enabled = false; sbInitGrouping->Enabled = false; colorChangeBtn->Enabled = false; } int i = AfterGroupingShapeList->IndexOf(Sender); if (selectedColor[i]) { selectedColor[i]=false; ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clWhite; ((TShape *)AfterBgGroupingShapeList->Items[i])->Pen->Color = clBlack; } else { selectedColor[i]=true; ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clBlue; ((TShape *)AfterBgGroupingShapeList->Items[i])->Pen->Color = clBlack; } wantedColorSpeedBtnClick(); if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::wantedColorSpeedBtnClick(bool skip) { BEGIN_LOG("::"); TColor *cp; TColor tColor; Byte *line, tempL[24]; Byte Blue=0, Green=0, Red=0; int height=previewBitmap->Height; int width=previewBitmap->Width; int check; if ( !wantedColorClick ) tempBitmap->Copy(previewBitmap, SRCCOPY); else { previewBitmap->Copy(tempBitmap, SRCCOPY); //tempBitmap->Copy(previewBitmap, SRCCOPY); } wantedColorClick=true; previewBitmap->StartScanLine(); for(int y=0;yGetScanLine(y); for(int x=0;xCount; i++) { if (selectedColor[i]) { cp = (TColor *)AfterGroupingColorList->Items[i]; if ( *cp == tColor ) check++; } } if (check==0) { line[0]=0xFF; line[1]=0xFF; line[2]=0xFF; } line+=3; } previewBitmap->PutScanLine(y); } previewBitmap->StopScanLine(); Image->Repaint(); if (skip) { END_LOG; return; // noose(¿Ã°¡¹Ì)±â´ÉÀ» ÀÌ¿ëÇÒ¶§¿¡´Â resetÀ» ÇÏ¸é ¾ÈµÈ´Ù. } switch(functionMenu.getCurrentFunction()) { case FUNC_FILTERING: ResetShape(FilterColorList, FilterShapeList); break; case FUNC_HALFTONE: ResetShape(HalftoneColorList, HalftoneShapeList); break; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RxSpinEdit1Change(TObject *Sender) { BEGIN_LOG("::"); if (RxSpinEdit1->Text.Length() > 0) { try { RxSpinEdit1->Text.ToInt(); if (RxSpinEdit1->Value>100) RxSpinEdit1->Value=100; if (RxSpinEdit1->Value<1) RxSpinEdit1->Value=1; } catch(EConvertError&) { RxSpinEdit1->Value = 10; } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RxSpinEdit2Change(TObject *Sender) { BEGIN_LOG("::"); if (RxSpinEdit2->Text.Length() > 0) { try { RxSpinEdit2->Text.ToInt(); if (RxSpinEdit2->Value>50) RxSpinEdit2->Value=50; if (RxSpinEdit2->Value<1) RxSpinEdit2->Value=1; } catch(EConvertError&) { RxSpinEdit2->Value = 20; } nooseBtn->Down=false; nooseBtn1->Down=false; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::initImageChange() { BEGIN_LOG("::"); if (RadioImage->Checked) { functionMenu.setFunction((FunctionType)functionMenu.imageFunctionType); if (functionMenu.getCurrentFunction() == FUNC_FILTERING) { sbExit->Visible=true; filterPanel->Visible = true;} else if (functionMenu.getCurrentFunction() == FUNC_CHANGECOLOR) { sbExit->Visible=true; ColorChangeControl->Visible = true; } else if (functionMenu.getCurrentFunction() == FUNC_WORKAREA) { sbExit->Visible=true; WorkAreaPanel->Visible = true; } else if (functionMenu.getCurrentFunction() == FUNC_GROUPING) { sbExit->Visible=true; pnGrouping->Visible = true; } else if (functionMenu.getCurrentFunction() == FUNC_HALFTONE) { sbExit->Visible=true; pnHalftone->Visible = true; pnHalftonePalette->Visible = true; } blurButton->Enabled = true; sbInitGrouping->Enabled = true; if (UndoBtnEnabled) UndoBtn->Enabled = true; if (RedoBtnEnabled) RedoBtn->Enabled = true; UndoBtnEnabled = false; RedoBtnEnabled = false; if (AfterGroupingColorList->Count>0) { fileteringButton->Enabled = true; colorChangeBtn->Enabled = true; workAreaBitBtn->Enabled = true; sbInitHalftone->Enabled = true; ColorInImagePanel->Visible = true; } if (wantedColorClick) { for(int i=0; iCount; i++) { if (selectedColor[i]) { ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clBlue; ((TShape *)AfterBgGroupingShapeList->Items[i])->Pen->Color = clBlack; } } isFirst = true; brushState = FIRST_POINT; Image->uBitmap = previewBitmap;// by celberus wantedColorSpeedBtnClick(); } else { isFirst = true; brushState = FIRST_POINT; Image->uBitmap = previewBitmap;// by celberus Image->isRepaintAll = true; Image->Repaint(); } } else if (RadioOriginal->Checked) { functionMenu.imageFunctionType = functionMenu.getCurrentFunction(); functionMenu.setFunction(FUNC_NONE); // ¿­·Á ÀÖ´Â ¸ðµç ¸Þ´º¿Í ColorIn Image°¡ ´ÝÈ÷´Â ºÎºÐ ColorChangeControl->Visible = false; pnHalftonePalette->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = false; filterPanel->Visible = false; WorkAreaPanel->Visible = false; ColorInImagePanel->Visible = false; //-------------------------------------------------- fileteringButton->Enabled = false; colorChangeBtn->Enabled = false; workAreaBitBtn->Enabled = false; sbInitHalftone->Enabled = false; blurButton->Enabled = false; sbInitGrouping->Enabled = false; if (UndoBtn->Enabled) UndoBtnEnabled = true; if (RedoBtn->Enabled) RedoBtnEnabled = true; UndoBtn->Enabled = false; RedoBtn->Enabled = false; //-------------------------------------------------- if (wantedColorClick) { for(int i=0; iCount; i++) { ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clWhite; ((TShape *)AfterBgGroupingShapeList->Items[i])->Pen->Color = clBlack; } } } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::returnPreviewBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (wantedColorClick) { previewBitmap->Copy(tempBitmap, SRCCOPY); Image->isRepaintAll = true; Image->Repaint(); wantedColorClick=false; for(int i=0; iCount; i++) { selectedColor[i]=false; ((TShape *)AfterBgGroupingShapeList->Items[i])->Brush->Color = clWhite; ((TShape *)AfterBgGroupingShapeList->Items[i])->Pen->Color = clBlack; } blurButton->Enabled = true; sbInitGrouping->Enabled = true; colorChangeBtn->Enabled = true; } if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ImageMouseLeave(TObject *Sender) { BEGIN_LOG("::"); isFirst=true; Screen->Cursor=crArrow; Image->Repaint(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbFullBtnClick(TObject *Sender) { BEGIN_LOG("::"); TCursor cursor; TPItemImage *tempImage; pBITMAPHANDLE bh; RGNXFORM XForm; RECT rc; HRGN rgn; cursor = Screen->Cursor; Screen->Cursor = crHourGlass; tempImage = Image; bh = tempImage->uBitmap->RgnBitmap->Handle; ResetBitmapRegion(); XForm.uViewPerspective = TOP_LEFT; XForm.nXScalarNum = 1; XForm.nXScalarDen = 1; XForm.nYScalarNum = 1; XForm.nYScalarDen = 1; XForm.nXOffset = 0; XForm.nYOffset = 0; rc.left = 0; rc.top = 0; rc.right = Image->uBitmap->Width; rc.bottom = Image->uBitmap->Height; L_SetBitmapRgnRect(bh, &XForm, &rc, L_RGN_SET); L_GetBitmapRgnHandle(bh, &XForm, &rgn); WorkArea->SetMask(rgn); DeleteObject(rgn); Image->OutlineBitmapRgn(); Image->Repaint(); StatusItem(); sbOff->Enabled = true; Screen->Cursor = cursor; if (wantedColorClick) { newgroupingUndo->do_(UT_WORKAREA, 1); UndoBtn->Enabled = true; } else { newgroupingUndo->do_(UT_WORKAREA, 0); UndoBtn->Enabled = true;} ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbInvertBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (WorkArea->Mask) { WorkArea->InvertRegion(); if (wantedColorClick) { newgroupingUndo->do_(UT_WORKAREA, 1); UndoBtn->Enabled = true;} else { newgroupingUndo->do_(UT_WORKAREA, 0); UndoBtn->Enabled = true;} Image->Invalidate(); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::sbExitClick(TObject *Sender) { BEGIN_LOG("::"); ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::nooseBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (nooseBtn->Down || nooseBtn1->Down) { InitItem(NG_IRREGULAR); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::filterBigScaleBtnClick(TObject *Sender) { BEGIN_LOG("::"); // Filter Form Resize---------------------- filterPanel->Height = 175; subFilterPanel->Height = 138; SizeLabel->Visible = true; RxSpinEdit1->Visible = true; subFilterPanel->Visible = true; EraseOrganizationPanel->Visible = false; nooseBtn->Down = false; nooseBtn1->Down=false; if (UsingPenRemoveBtn->Down) { filterPanel->Height = 150; subFilterPanel->Height = 110; nooseBtn->Visible = false; SizeLabel->Visible = true; RxSpinEdit2->Visible = true; RxSpinEdit1->Visible = false; SizeLabel->Caption = IDS_NGFILTERPENSIZE; } else if (EraseOutLineBtn->Down) { nooseBtn->Visible = true; SizeLabel->Visible = false; RxSpinEdit1->Visible = false; RxSpinEdit2->Visible = false; } else { nooseBtn->Visible = true; SizeLabel->Visible = true; RxSpinEdit1->Visible = true; RxSpinEdit2->Visible = false; SizeLabel->Caption = IDS_NGFILTERPIXELSIZE; } if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::EraseOrganizationBtnClick( TObject *Sender) { BEGIN_LOG("::"); // Filter Form Resize---------------------- filterPanel->Height = 95; EraseOrganizationPanel->Top = 50; EraseOrganizationPanel->Visible = true; subFilterPanel->Visible = false; nooseBtn->Down = false; nooseBtn1->Down=false; if (FirstPointClick) { colorSelectionArea.left = -1; colorSelectionArea.top = -1; colorSelectionArea.right = -1; colorSelectionArea.bottom = -1; NewGroupingDrawRectangleLocate(colorSelectionArea,0); FirstPointClick = false; } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::penBlockBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (penBlockBtn->Down) penBlockBtn->Hint = IDS_NGONECOLOR; else penBlockBtn->Hint = IDS_NGBLOCKCOLOR; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::penInsertBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (penInsertBtn->Down) penInsertBtn->Hint = IDS_NGDELETECOLOR; else penInsertBtn->Hint = IDS_NGINSERTCOLOR; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::irregularBlockBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (irregularBlockBtn->Down) irregularBlockBtn->Hint = IDS_NGONECOLOR; else irregularBlockBtn->Hint = IDS_NGBLOCKCOLOR; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::irregularInsertBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (irregularInsertBtn->Down) irregularInsertBtn->Hint = IDS_NGDELETECOLOR; else irregularInsertBtn->Hint = IDS_NGINSERTCOLOR; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::filterColorBlockBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (filterColorBlockBtn->Down) filterColorBlockBtn->Hint = IDS_NGONECOLOR; else filterColorBlockBtn->Hint = IDS_NGBLOCKCOLOR; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::filterColorInsertBtnClick(TObject *Sender) { BEGIN_LOG("::"); if (filterColorInsertBtn->Down) filterColorInsertBtn->Hint = IDS_NGDELETECOLOR; else filterColorInsertBtn->Hint = IDS_NGINSERTCOLOR; END_LOG; } //--------------------------------------------------------------------------- bool __fastcall TNewGroupingForm::checkColorInImage() { BEGIN_LOG("::"); Byte *bp; TColor temp[60], tColor; int ix, i, check=0, num=0; int checkLineNum; checkLineNum = previewBitmap->Height/2; previewBitmap->StartScanLine(); bp = previewBitmap->GetScanLine(checkLineNum); for (ix=0; ix<=previewBitmap->Width; ix++) { tColor = (TColor)((bp[3*ix] << 16) + (bp[3*ix+1] << 8) + bp[3*ix+2]); if (ix == 0 ) temp[0] = tColor; else { for (i=0; i 50) goto fail; } ColorInImagePanel->Visible = true; fileteringButton->Enabled = true; colorChangeBtn->Enabled = true; workAreaBitBtn->Enabled = true; sbInitHalftone->Enabled = true; blurButton->Enabled = true; sbInitGrouping->Enabled = true; existBluredImage = true; previewBitmap->StopScanLine(); END_LOG; return true; fail: // ¿­·Á ÀÖ´Â ¸ðµç ¸Þ´º¿Í ColorIn Image°¡ ´ÝÈ÷´Â ºÎºÐ ColorChangeControl->Visible = false; pnHalftonePalette->Visible = false; pnGrouping->Visible = false; pnHalftone->Visible = false; filterPanel->Visible = false; WorkAreaPanel->Visible = false; ColorInImagePanel->Visible = false; //-------------------------------------------------- fileteringButton->Enabled = false; colorChangeBtn->Enabled = false; workAreaBitBtn->Enabled = false; sbInitHalftone->Enabled = false; blurButton->Enabled = true; sbInitGrouping->Enabled = true; previewBitmap->StopScanLine(); END_LOG; return false; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::NewGroupingFormMouseWheel(TShiftState Shift, int WheelDelta) { BEGIN_LOG("::"); /* if (NewGroupingViewForm->Visible) NewGroupingViewForm->ViewFormMouseWheel(Shift, WheelDelta); else*/ Image->SetPosition(Image->PositionX, Image->PositionY-WheelDelta); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ImageViewerClick(TObject *Sender) { // NewGroupingViewForm->ViewForm(previewBitmap, originalBitmap); } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::FormCloseQuery(TObject *Sender, bool &CanClose) { BEGIN_LOG("::"); if ( (Application->MessageBox(IDS_NGCLOSEMSGBOX.c_str(), L"Information", MB_OKCANCEL)) == 1){ CanClose = true; bClose = true; } else CanClose = false; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::PenSizeClick(TObject *Sender) { BEGIN_LOG("::"); PenSize->SelectAll(); PenSize->SetFocus(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RxSpinEdit1Click(TObject *Sender) { BEGIN_LOG("::"); RxSpinEdit1->SelectAll(); RxSpinEdit1->SetFocus(); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::RxSpinEdit2Click(TObject *Sender) { BEGIN_LOG("::"); RxSpinEdit2->SelectAll(); RxSpinEdit2->SetFocus(); END_LOG; } //--------------------------------------------------------------------------- // Remove_Pen¿¡¼­ Image¿¡ Mouse pointer(cursor)¸¦ ¸¸µé¾î ÁÖ´Â ºÎºÐ void __fastcall TNewGroupingForm::ImagePaintCursor(TObject *Sender, HDC dc, int X, int Y) { BEGIN_LOG("::"); HBRUSH hOldBrush=NULL; HPEN hOldPen=NULL, hPen=NULL; int nDrawMode; int ls, rs, left, top, right, bottom, dia; if ( ColorChangeControl->ActivePage == PenTabSheet || UsingPenRemoveBtn->Down ) { hOldBrush = (HBRUSH)SelectObject(dc, GetStockObject(NULL_BRUSH)); hPen = CreatePen(PS_SOLID, 1, clWhite); hOldPen = (HPEN)SelectObject(dc, hPen); nDrawMode = GetROP2(dc); SetROP2(dc, R2_NOT); if ( UsingPenRemoveBtn->Down ) dia = RxSpinEdit2->Value; else dia = PenSize->Value; ls = dia>>1; rs = dia-ls; double ratio=Image->ZoomIn/Image->ZoomOut; if (dia*ratio>5) { left = X-ls*ratio; top = Y-ls*ratio; right = X+rs*ratio+1; bottom = Y+rs*ratio+1; Ellipse(dc, left, top, right, bottom); } MoveToEx(dc, X, Y-15, NULL); LineTo(dc, X, Y+15); MoveToEx(dc, X-15, Y, NULL); LineTo(dc, X+15, Y); SetROP2(dc, nDrawMode); SelectObject(dc, hOldBrush); SelectObject(dc, hOldPen); DeleteObject(hPen); } END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::SaveGroupingFile() { BEGIN_LOG("::"); ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. HANDLE hFile = INVALID_HANDLE_VALUE; //String filename; String filename; TCursor cur; cur = Screen->Cursor; //PChar s; PChar s; int FileNameLength, last1, last2, last3, last4; //Char FileIndex1, FileIndex2, FileIndex3, FileIndex4; Char FileIndex1, FileIndex2, FileIndex3, FileIndex4; TPException ec = EC_NONE; if (SaveDialog1->Execute()) { //=============================================================== FileNameLength = SaveDialog1->FileName.Length(); if(FileNameLength > 4){ last1 = FileNameLength-3; last2 = FileNameLength-2; last3 = FileNameLength-1; last4 = FileNameLength; FileIndex1 = L'.'; FileIndex2 = L'n'; FileIndex3 = L'g'; FileIndex4 = L'f'; if((FileIndex1 == SaveDialog1->FileName[last1])&&(FileIndex2 == SaveDialog1->FileName[last2]) && (FileIndex3 == SaveDialog1->FileName[last3])&&(FileIndex4 == SaveDialog1->FileName[last4])){ s = L"PASS"; }else s=NULL; }else s=NULL; //=============================================================== //if (s==NULL) filename = SaveDialog1->FileName + ".ngf"; if (s==NULL) filename = SaveDialog1->FileName + String(".ngf"); else filename = SaveDialog1->FileName; //if (FileExists(filename)) { if (FileExists(filename)) { int btn = EXCEPTION_MESSAGE2_OKCANCEL(EC_FILE_EXIST_ALREADY, (IDS_MESSAGE_REALLYFILESAVE).c_str()); if (btn == mrOk) { //if ((hFile = CreateFile(filename.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, // FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { // { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } //} if ((hFile = CreateFile(filename.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } } Screen->Cursor = crHourGlass; SaveToFile(hFile); CloseHandle(hFile); goto next; } else { goto next; } } //if ((hFile = CreateFile(filename.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, // FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { // { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } //} if ((hFile = CreateFile(filename.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } } Screen->Cursor = crHourGlass; SaveToFile(hFile); CloseHandle(hFile); next: } Screen->Cursor = cur; END_LOG; return; fail: Screen->Cursor = cur; EXCEPTION_MESSAGE_OK(ec); END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::LoadGroupingFile() { BEGIN_LOG("::"); TPException ec = EC_NONE; ExitFunction(); // ¿­·Á ÀÖ´Â ¸ðµç ÆûÀ» ´Ý´Â´Ù. HANDLE hFile = INVALID_HANDLE_VALUE; //String filename; String filename; TCursor cur; cur = Screen->Cursor; if (OpenDialog1->Execute()) { //if (FileExists(OpenDialog1->FileName)) { //} if (FileExists(OpenDialog1->FileName)) { } filename = OpenDialog1->FileName; //if ((hFile = CreateFile(filename.c_str(), GENERIC_READ, 0, NULL, OPEN_ALWAYS, // FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { // { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } //} if ((hFile = CreateFile(filename.c_str(), GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { { ec = EC_FORM_NOT_CREATE; SAVE_EXCEPTION(ec); goto fail; } } if (Application->MessageBox(L"If you load any file, current data will be deleted. Could you continue~", L"Information", MB_YESNO) == IDNO) { CloseHandle(hFile); END_LOG; return; } //-------------------------------------------------------------------------- ResetBackupList(backupGroupingColorList); ResetShape(AfterGroupingColorList, AfterGroupingShapeList); ResetBgShape(AfterBgGroupingShapeList); ResetGroupingColorLabel(GroupingColorNum); ResetPointList(); DelLineMem(); delete newgroupingUndo; WorkArea->Reset(true); //WorkAreaÀÇ Undo data¸¦ Áö¿ì´Â °ÍÀ¸·Î ÃßÃø(05.07.22) deleteBitmaps(); ResetInitForm(); //-------------------------------------------------------------------------- Screen->Cursor = crHourGlass; LoadFromFile(hFile); CloseHandle(hFile); } Screen->Cursor = cur; END_LOG; return; fail: Screen->Cursor = cur; EXCEPTION_MESSAGE_OK(ec); END_LOG; } //--------------------------------------------------------------------------- bool __fastcall TNewGroupingForm::SaveToFile(HANDLE fh) { BEGIN_LOG("::"); DWORD dwWrite; TColor *tcolor; int Version = 130, gcount = 0, agcount = 0; int ImageWidth = originalBitmap->Width; int ImageHeight = originalBitmap->Height; if (!WriteFile(fh, &Version, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(fh, &ImageWidth, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(fh, &ImageHeight, sizeof(int), &dwWrite, NULL)) goto fail; if (!originalBitmap->SaveToTexpiaFile(fh, cmZLib, false, NULL)) { END_LOG; return false; } if (!previewBitmap->SaveToTexpiaFile(fh, cmZLib, false, NULL)) { END_LOG; return false; } if (!blurBitmap->SaveToTexpiaFile(fh, cmZLib, false, NULL)) { END_LOG; return false; } gcount = backupGroupingColorList->Count; if (!WriteFile(fh, &gcount, sizeof(int), &dwWrite, NULL)) goto fail; for (int i=0; iItems[i]; if (!WriteFile(fh, tcolor, sizeof(TColor), &dwWrite, NULL)) goto fail; } agcount = AfterGroupingColorList->Count; if (!WriteFile(fh, &agcount, sizeof(int), &dwWrite, NULL)) goto fail; for (int i=0; iItems[i]; if (!WriteFile(fh, tcolor, sizeof(TColor), &dwWrite, NULL)) goto fail; } END_LOG; return true; fail: END_LOG; return false; } //--------------------------------------------------------------------------- bool __fastcall TNewGroupingForm::LoadFromFile(HANDLE fh) { BEGIN_LOG("::"); DWORD dwRead; TColor *tcolor; int Version = 130, gcount = 0, agcount = 0; int ImageWidth, ImageHeight; if (!ReadFile(fh, &Version, sizeof(int), &dwRead, NULL)) goto fail; if (!ReadFile(fh, &ImageWidth, sizeof(int), &dwRead, NULL)) goto fail; if (!ReadFile(fh, &ImageHeight, sizeof(int), &dwRead, NULL)) goto fail; if ((originalBitmap = new TUnionBitmap)==NULL) goto fail; if (!originalBitmap->Create(ImageWidth, ImageHeight, 24)) goto fail; if ((previewBitmap = new TUnionBitmap)==NULL) goto fail; if (!previewBitmap->Create(ImageWidth, ImageHeight, 24)) goto fail; if ((blurBitmap = new TUnionBitmap)==NULL) goto fail; if (!blurBitmap->Create(ImageWidth, ImageHeight, 24)) goto fail; if ((tempBitmap = new TUnionBitmap)==NULL) goto fail; if (!tempBitmap->Create(ImageWidth, ImageHeight, 24)) goto fail; if (!originalBitmap->LoadFromTexpiaFile(fh, cmZLib, NULL)) goto fail; if (!previewBitmap->LoadFromTexpiaFile(fh, cmZLib, NULL)) goto fail; if (!blurBitmap->LoadFromTexpiaFile(fh, cmZLib, NULL)) goto fail; if (!ReadFile(fh, &gcount, sizeof(int), &dwRead, NULL)) goto fail; for (int i=0; iAdd(tcolor); } if (!ReadFile(fh, &agcount, sizeof(int), &dwRead, NULL)) goto fail; for (int i=0; iVisible = true; fileteringButton->Enabled = true; colorChangeBtn->Enabled = true; sbInitHalftone->Enabled = true; } workAreaBitBtn->Enabled = true; blurButton->Enabled = true; sbInitGrouping->Enabled = true; Image->uBitmap = previewBitmap; newgroupingUndo = new NewGrouingUndo(blurBitmap, previewBitmap, tempBitmap, WorkArea); // redo/undo »ý¼º if (selectedColor) {delete[] selectedColor; selectedColor=NULL;} selectedColor = new bool[AfterGroupingColorList->Count]; for(int i=0; iCount; i++) selectedColor[i]=false; AllocLineMem(ImageHeight); /* TODO : µû·Î »¬°Í */ updateImage(); Image->isRepaintAll = true; Image->Repaint(); ColorCount++; NewGroupingStart = true; isDragImage = false; //------------------------------------------------------------------------ // StatusBar¿¡ Á¤º¸¸¦ ³Ö´Â ºÎºÐ gbStatusBar->Panels->Items[0]->Text = " Size : " + MainImageForm->CanvasInfor.Name(MainImageForm->CurrentUnit, ImageWidth, ImageHeight); gbStatusBar->Panels->Items[1]->Text = Format("DPI : %d", OPENARRAY(TVarRec, (MainImageForm->CanvasInfor.DotsPerInch))); gbStatusBar->Panels->Items[2]->Text = "Zoom : 1"; //------------------------------------------------------------------------ END_LOG; return true; fail: if (originalBitmap != NULL) originalBitmap->Destroy(); if (blurBitmap != NULL) blurBitmap->Destroy(); if (previewBitmap != NULL) { delete previewBitmap; previewBitmap = NULL; } END_LOG; return false; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ResetInitForm() { BEGIN_LOG("::"); SelectColorListAdd = false; isDrawingRegion = false; isFirst = true; freedraw = false; sourceColor = NULL; targetColor = NULL; wantedColorClick = false; // color in image¿¡ ÀÖ´Â »öÀ» ´­·¶´ÂÁö ¾Æ´ÑÁö¸¦ È®ÀÎÇϱâ À§Çؼ­ afterGrouping = false; existBluredImage = false; color_In_target = false; FirstPointClick = false; // »öÀ» ¼±ÅÃÇϱâ À§Çؼ­ ÀÛ¾÷±¸¿ªÀ» ÀâÀ» ¶§ ù¹øÂ° Á¡À» // Âï¾ú´ÂÁö È®ÀÎÇϱâ À§ÇÑ º¯¼ö msx = NULL; memsize = 0; hMemLine = NULL; NewGroupingStart = false; ColorCount = 0; colorSelectionArea = Rect(-1,-1,-1,-1); isPaintDirectlyClean=false; filetrCounter=0; penCounter=0; irregularCounter=0; groupingCounter=0; RedoBtnEnabled = false; UndoBtnEnabled = false; UndoBtn->Enabled = false; RedoBtn->Enabled = false; existBluredImage = false; sbHorz->Position=0; sbVert->Position=0; END_LOG; } //--------------------------------------------------------------------------- void __fastcall TNewGroupingForm::ExecuteHotKey(String command) { BEGIN_LOG("::"); if (command == "ZoomIn") { int Ratio = 0; switch (Image->ZoomIn) { //ÇöÀçÀÇ È®´ë, Ãà¼ÒµÈ ºñÀ²Àº ¾Ë¾Æ³»¾î case 1: switch (Image->ZoomOut) { // ºñÀ²¿¡ µû¶ó ratio¶ó´Â º¯¼ö¿¡ Àû´çÇÑ °ªÀ» case 1: Ratio = 302; break; // ÀԷ½Ã۰í, ±×°ÍÀº parameter·Î ÇÏ´Â ÇÔ¼ö(RatioZoom) case 2: Ratio = 203; break; // ¸¦ È£ÃâÇÑ´Ù. case 3: Ratio = 102; break; case 4: Ratio = 103; break; // ¼öÁ¤ By GreenFish (Áܴܰè È®Àå) case 6: Ratio = 104; break; case 8: Ratio = 106; break; case 12: Ratio = 108; break; case 16: Ratio = 112; break; } break; case 2: switch (Image->ZoomOut) { case 1: Ratio = 301; break; case 3: Ratio = 101; break; } break; case 3: switch (Image->ZoomOut) { case 1: Ratio = 401; break; case 2: Ratio = 201; break; } break; case 4: Ratio = 601; break; case 6: Ratio = 801; break; case 8: Ratio = 1201; break; case 12: Ratio = 1601; break; default: { END_LOG; return; } } RatioZoom(Ratio); } else if (command == "ZoomOut") { int Ratio = 0; switch (Image->ZoomIn) { case 1: switch (Image->ZoomOut) { case 1: Ratio = 203 ; break; case 2: Ratio = 103; break; case 3: Ratio = 104; break; case 4: Ratio = 106; break; case 6: Ratio = 108; break; case 8: Ratio = 112; break; case 12: Ratio = 116; break; default: { END_LOG; return; } } break; case 2: switch (Image->ZoomOut) { case 1: Ratio = 302; break; case 3: Ratio = 102; break; } break; case 3: switch (Image->ZoomOut) { case 1: Ratio = 201; break; case 2: Ratio = 101; break; } break; case 4: Ratio = 301; break; case 6: Ratio = 401; break; case 8: Ratio = 601; break; case 12 : Ratio = 801; break; case 16 : Ratio = 1201; break; default: { END_LOG; return; } } RatioZoom(Ratio); } else if (command == "Undo") { if (UndoBtn->Enabled == false) UndoBtnClick(this); } else if (command == "Redo") { if (RedoBtn->Enabled == true) RedoBtnClick(this); } END_LOG; } //---------------------------------------------------------------------------