//--------------------------------------------------------------------------- #pragma hdrstop #include "VecDraw.h" #include "Palette.h" #include "Main.h" #include "StyleCombo_F.h" #include "PatternLibrary.h" #include "Define.h" #include "MainImage.h" //--------------------------------------------------------------------------- #define IDS_COMBOMSGBOX1 StringTable[0] #define IDS_COMBOMSGBOX2 StringTable[1] #define IDS_COMBOMSGBOX3 StringTable[2] //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- TPatternLibrary *PatternLibrary; //--------------------------------------------------------------------------- __fastcall TPatternLibrary::TPatternLibrary() { StringTable.Create(DirectoryItem, Language, "PatternLibrary"); ColorNumber = 0; PatternNumber = 0; ListOfImage = new TList; ListOfNumber = new TList; ListOfSize = new TList; ListOfPanel = new TList; ListOfpData = new TList; // LIst of Pattern Data Class Palette = NULL; anyChanged = false; } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::InitForm() { if ((Palette = new TPalette)==NULL) goto fail; PaletteForm->InitForm(Palette); CanvasInfor.DotsPerInch = MainImageForm->CanvasInfor.DotsPerInch;; CanvasInfor.SetExtFileOption(); return; fail: if (Palette) delete Palette; Palette = NULL; } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::ExitForm() { // SavePatternLibrary(); // RunÇÒ ¶§ ÀúÀåµÇµµ·Ï º¯°æÇؼ­ ÁÖ¼®Ã³¸® if (!ListOfImage) return; if (ListOfImage->Count > 0) ResetPanel(); ResetPatternDataList(); // Reset Pattern Data Class if (ListOfpData) delete ListOfpData; ListOfpData=NULL; if (ListOfImage) delete ListOfImage; ListOfImage=NULL; if (ListOfNumber) delete ListOfNumber; ListOfNumber=NULL; if (ListOfSize) delete ListOfSize; ListOfSize=NULL; if (ListOfPanel) delete ListOfPanel; ListOfPanel=NULL; if (Palette) delete Palette; Palette = NULL; } //--------------------------------------------------------------------------- // ÃʱâÈ­ __fastcall TPatternDATA::TPatternDATA() { bpp = 24; Width = 0; Height = 0; kindOfPattern = -1; // 0: Image, 1: Color selectedColor = (TColor)0; isSelected = false; // selected : true RealImageBitmap = NULL; } //--------------------------------------------------------------------------- __fastcall TPatternDATA::TPatternDATA(WORD tbpp, COLORREF tColor) { // bpp = tbpp; bpp = 24; Width = 0; Height = 0; kindOfPattern = 1; // 0: Image, 1: Color selectedColor = tColor; isSelected = false; // selected : true RealImageBitmap = NULL; } //--------------------------------------------------------------------------- // ÃʱâÈ­ __fastcall TPatternDATA::TPatternDATA(WORD tbpp, TTexpiaBitmap *tBitmap) { // bpp = tbpp; bpp = 24; Width = tBitmap->Width; Height = tBitmap->Height; kindOfPattern = 0; // 0: Image, 1: Color selectedColor = (TColor)0; isSelected = false; // selected : true RealImageBitmap = new TTexpiaBitmap; RealImageBitmap->Create(Width, Height, bpp); RealImageBitmap->Copy(tBitmap, SRCCOPY); } //--------------------------------------------------------------------------- TPException __fastcall TPatternLibrary::InitOpenFile(String directoryName, String fileName, TGraphicFileFormat ExtIndex, WORD bpp) { int pw, ph, x, y; RGBQUAD rgb[256]; TTexpiaBitmap *tb = NULL; TPCanvasInfor ci; Byte c[256], *bp=NULL, *sp=NULL, *dp=NULL; TEXPIAFILEHEADER tpfh; TPException ec = EC_NONE; bool layer = false; bool vector = false; HANDLE hFile = INVALID_HANDLE_VALUE; String ext = LowerCase(ExtractFileExt(fileName)); TGraphicFileFormat RealIndex = FindExtension(ext); TTexpiaBitmap *RealImageBitmap = new TTexpiaBitmap; TPStretchImage *Image = new TPStretchImage(StyleComboForm); TPanel *Panel = new TPanel(StyleComboForm); TLabel *Number = new TLabel(StyleComboForm); TLabel *Size = new TLabel(StyleComboForm); ListOfPanel->Add(Panel); AddPatternImage(Image, Number, Size, Panel); // T3D ¹× N3D ¸·À½ - by monkman (2005.09.12) //if(ExtIndex==gffT3D){ } if ((tb = new TTexpiaBitmap)==NULL) { ec = EC_MEMORY_LACK; goto fail; } // T3D ¹× N3D ¸·À½ - by monkman (2005.09.12) //if (ExtIndex==gffT3D) { } else { if ((ec = LoadFromFile(FullPathName(directoryName,fileName), ExtIndex, tb, Palette, ci, layer, vector, bpp))!=EC_NONE) goto fail; if (layer || vector) { if (Image) delete Image; if (Number) delete Number; if (Size) delete Size; if (RealImageBitmap) delete RealImageBitmap; TPanel *tPanel; tPanel = (TPanel *)ListOfPanel->Last(); ListOfPanel->Remove(tPanel); delete tPanel; tPanel=NULL; if (layer) Application->MessageBox(IDS_COMBOMSGBOX1.c_str(), L"Information", MB_ICONINFORMATION | MB_OK); else if (vector) Application->MessageBox(IDS_COMBOMSGBOX2.c_str(), L"Information", MB_ICONINFORMATION | MB_OK); delete tb; return EC_NONE; } if (!CreatePatternImage(ci, bpp, RealImageBitmap, layer)) { ec = EC_MEMORY_LACK; goto fail; } if (layer == false) { if (bpp==8) { if (tb->BitsPerPixel==8) { if (ExtIndex == gffTEX || ExtIndex == gffTFC || ExtIndex == gffWEA || ExtIndex == gffWAV || ExtIndex == gffKNT) { Palette->ToRGBQUAD(rgb, 256); RealImageBitmap->PutColors(0, 256, rgb); if (!RealImageBitmap->Copy(tb, SRCCOPY)) { ec = EC_RESOURCE_LACK; goto fail; } } else { goto next; } } else { tb->ColorResolution(8, CRF_OPTIMIZEDPALETTE, NULL, 250); tb->GetColors(0, 256, rgb); Palette->SetNormal(0, 0, 0, 0); for (x=0; x<250; x++) { Palette->SetNormal(x+2, rgb[x].rgbRed, rgb[x].rgbGreen, rgb[x].rgbBlue); } Palette->SetNormal(255, 255, 255, 255); next: Palette->ToRGBQUAD(rgb, 256); RealImageBitmap->PutColors(0, 256, rgb); memset(c, 0, 256); if (!tb->StartScanLine()) { ec = EC_MEMORY_LACK; goto fail; } if (!RealImageBitmap->StartScanLine()) { ec = EC_MEMORY_LACK; goto fail; } for (y=0; yHeight; y++) { sp = tb->GetScanLine(y); dp = RealImageBitmap->GetScanLine(y); for (x=0; xWidth; x++, sp++, dp++) { *dp = *sp+2; c[*dp] = 1; } RealImageBitmap->PutScanLine(y); } tb->StopScanLine(); RealImageBitmap->StopScanLine(); for (x=251; x>=1; x--) { if (c[x]==1) { Palette->UseColor = x; break; } } } } else { if (!RealImageBitmap->Copy(tb, SRCCOPY)) { ec = EC_RESOURCE_LACK; goto fail; } } } PaletteForm->DIB256Palette->ChoiceIndex = 2; } // patternÀÇ °³¼ö°¡ º¯°æµÊ anyChanged = true; // Add Data in the List Image->Bitmap->Create(RealImageBitmap->Width, RealImageBitmap->Height, 24); Image->Bitmap->Copy(RealImageBitmap, SRCCOPY); RatioCalculate(Image, RealImageBitmap, StyleComboForm->psImage->Width, StyleComboForm->psImage->Height); Image->Repaint(); ListOfImage->Add(Image); ListOfNumber->Add(Number); float ImageW, ImageH; ImageW = (float)tb->Width/ci.DotsPerInch; ImageH = (float)tb->Height/ci.DotsPerInch; if (MainImageForm->CurrentUnit==uCm) { int imageW, imageH; imageW = ImageW*2.54*10; imageH = ImageH*2.54*10; Size->Caption = FloatToStr((float)imageW/10) + " X " + FloatToStr((float)imageH/10); } else if (MainImageForm->CurrentUnit==uInch) { int imageW, imageH; imageW = ImageW*10; imageH = ImageH*10; Size->Caption = FloatToStr((float)imageW/10) + " X " + FloatToStr((float)imageH/10); } else { Size->Caption = IntToStr(tb->Width) + " X " + IntToStr(tb->Height); } ListOfSize->Add(Size); TPatternDATA *patternData; patternData = new TPatternDATA(bpp, RealImageBitmap); ListOfpData->Add(patternData); PatternNumber++; delete tb; delete RealImageBitmap; return EC_NONE; fail: if (tb) { // T3D ¹× N3D ¸·À½ - by monkman (2005.09.12) /* if (ExtIndex==gffT3D) { if (hFile!=INVALID_HANDLE_VALUE) { CloseHandle(hFile); } } */ delete tb; } if (RealImageBitmap) delete RealImageBitmap; return ec; } //--------------------------------------------------------------------------- TPException __fastcall TPatternLibrary::LoadFromFile(String FileName, TGraphicFileFormat Index, TTexpiaBitmap *pBitmap, TPalette *pPalette, TPCanvasInfor &ci, bool &layer, bool &vector, WORD bpp) { TEXPIAFILEHEADER tpfh; int x, y; RGBQUAD rgb[256]; Byte c[256]; TPException ec = EC_NONE; HANDLE hFile = INVALID_HANDLE_VALUE; DWORD dwRead; TUnionBitmap *tempBitmap = NULL; if (Index==gffTEX || Index==gffTFC) { if ((hFile = CreateFile(FileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; goto fail; } tempBitmap = new TUnionBitmap; if ((ec = LoadFromTexpiaFile(hFile, pPalette, tpfh, tempBitmap, Index))!= EC_NONE) goto fail; if (!pBitmap->Create(tpfh.CanvasInfor.Width, tpfh.CanvasInfor.Height, tpfh.BitsPerPixel)) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if (tpfh.BitsPerPixel==8) { pPalette->ToRGBQUAD(rgb, 256); pBitmap->PutColors(0, 256, rgb); } tempBitmap->CopyToTexpia(pBitmap, 0, 0, tempBitmap->Width, tempBitmap->Height, 0, 0, SRCCOPY); delete tempBitmap; tempBitmap = NULL; ci = tpfh.CanvasInfor; if (tpfh.Version.Texpia == 'P' && tpfh.Version.Method == 'T'&& tpfh.Version.Number >= 230) { if (!ReadFile(hFile, &layer, sizeof(bool), &dwRead, NULL)) goto fail; if (layer) { CloseHandle(hFile); return EC_NONE;} if (tpfh.Version.Number >= 240) { if (!ReadFile(hFile, &vector, sizeof(bool), &dwRead, NULL)) goto fail; if (vector) { CloseHandle(hFile); return EC_NONE;} } } CloseHandle(hFile); } else if(Index==gffWEA || Index==gffWAV || Index==gffKNT) { if ((hFile = CreateFile(FileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; goto fail; } if ((ec = LoadFromTexpiaFile(hFile, pPalette, tpfh, pBitmap, Index))!= EC_NONE) goto fail; ci = tpfh.CanvasInfor; CloseHandle(hFile); } else { if (!pBitmap->LoadFromFile(FileName.c_str())) { ec = EC_FILE_NOT_READ; goto fail; } ci.DotsPerInch = pBitmap->DotsPerInch; // By GreenFish ci.SetSize(cstFree, pBitmap->Width, pBitmap->Height); if (pBitmap->BitsPerPixel==8) { pBitmap->GetColors(0, 256, rgb); pPalette->SetNormal(0, 0, 0, 0); for (x = 0; x < 250; x++) { pPalette->SetNormal(x+2, rgb[x].rgbRed, rgb[x].rgbGreen, rgb[x].rgbBlue); } pPalette->SetNormal(255, 255, 255, 255); } } return EC_NONE; fail: if (hFile!=INVALID_HANDLE_VALUE) CloseHandle(hFile); if (tempBitmap) delete tempBitmap; tempBitmap = NULL; return ec; } //--------------------------------------------------------------------------- bool __fastcall TPatternLibrary::CreatePatternImage(TPCanvasInfor &pi, int bpp, TTexpiaBitmap *RealImageBitmap, bool layer) { RGBQUAD rgb[256]; if (pi.SizeType!=cstFree) { pi.Width = pi.GetWidth(); pi.Height = pi.GetHeight(); } CanvasInfor = pi; CanvasInfor.SetExtFileOption(); if (layer == false) if (!RealImageBitmap->Create(CanvasInfor.Width, CanvasInfor.Height, 24)) goto fail; return true; fail: EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); return false; } //--------------------------------------------------------------------------- // Image Size¸¦ Á¶ÀýÇÏ´Â ÇÔ¼ö // FullView¿¡¼­ CopyÇÑ ºÎºÐ // ÃßÈÄ ¾÷±×·¹À̵å : ¹Ì¸®º¸±â¿¡¼­ ÁÜ ±â´ÉÀ» Ãß°¡ÇؾßÇÑ´Ù. À̶§ À̺κÐÀ» ¼Õº¸¸é µÉ°Í °°´Ù. void __fastcall TPatternLibrary::RatioCalculate(TPStretchImage *sImage, TTexpiaBitmap *tBitmap, int TargetWidth, int TargetHeight) { int ratio; bool bRatio; int width = tBitmap->Width; int height = tBitmap->Height; if (tBitmap) { ratio = 1; if (TargetWidth < width || TargetHeight < height) { while (true) { if (TargetWidth>=width/ratio && TargetHeight>=height/ratio) { break; } ratio++; } bRatio = false; } else { while (true) { if (TargetWidth < width*ratio || TargetHeightSetZoom(ratio, 1); sImage->Width = width*ratio; sImage->Height = height*ratio; } else { sImage->SetZoom(1, ratio); sImage->Width = width/ratio; sImage->Height = height/ratio; } } } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::AddPatternImage(TPStretchImage *tImage, TLabel *tNumber, TLabel *tSize, TPanel *tPanel) { int i = ListOfPanel->Count; int nextTop = StyleComboForm->LabelOfNumber->Height + 2 + StyleComboForm->pnPattern->Height + 2 + StyleComboForm->LabelOfSize->Height + 5; tPanel->Parent = StyleComboForm->PatternLibraryScrollBox; tPanel->Top = StyleComboForm->pnPattern->Top + nextTop*((i-1)/3); tPanel->Left = StyleComboForm->pnPattern->Left + (StyleComboForm->pnPattern->Width+4)*((i-1)%3); tPanel->Width = StyleComboForm->pnPattern->Width; tPanel->Height = StyleComboForm->pnPattern->Height; tPanel->Color = clWhite; tPanel->BevelInner = bvNone; tPanel->BevelKind = bkFlat; tPanel->BevelOuter = bvNone; tPanel->BevelWidth = 1; tPanel->OnMouseUp = StyleComboForm->pnPatternMouseUp; tPanel->OnDblClick = StyleComboForm->pnPatternDblClick; tPanel->OnMouseDown = StyleComboForm->pnPatternMouseDown; tImage->Parent = tPanel;//StyleComboForm->PatternLibraryScrollBox; tImage->Top = 2;//StyleComboForm->psImage->Top + nextTop*((i-1)/3); tImage->Left = 2;//StyleComboForm->pnPattern->Left+ (StyleComboForm->pnPattern->Width+4)*((i-1)%3) + 4; tImage->Width = StyleComboForm->psImage->Width; tImage->Height = StyleComboForm->psImage->Height; tImage->OnMouseUp = StyleComboForm->psImageMouseUp; tImage->OnDblClick = StyleComboForm->psImageDblClick; tImage->OnMouseDown = StyleComboForm->psImageMouseDown; tNumber->Parent = StyleComboForm->PatternLibraryScrollBox; tNumber->Top = StyleComboForm->LabelOfNumber->Top + nextTop*((i-1)/3); tNumber->Left = StyleComboForm->LabelOfNumber->Left + (StyleComboForm->LabelOfNumber->Width+4)*((i-1)%3); tNumber->Width = StyleComboForm->LabelOfNumber->Width; tNumber->Height = StyleComboForm->LabelOfNumber->Height; tNumber->Alignment = taCenter; tNumber->AutoSize = false; tNumber->Caption = "No." + IntToStr(i); tSize->Parent = StyleComboForm->PatternLibraryScrollBox; tSize->Top = StyleComboForm->LabelOfSize->Top + nextTop*((i-1)/3); tSize->Width = StyleComboForm->LabelOfSize->Width; tSize->Height = StyleComboForm->LabelOfSize->Height; tSize->Left = StyleComboForm->LabelOfSize->Left + (StyleComboForm->LabelOfSize->Width+4)*((i-1)%3); tSize->Alignment = taCenter; tSize->AutoSize = false; StyleComboForm->runNum = 0; } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::ArrangePanel() { TPStretchImage *tImage; TLabel *tNumber; TLabel *tSize; TPanel *tPanel; int nextTop = StyleComboForm->LabelOfNumber->Height + 2 + StyleComboForm->pnPattern->Height + 2 + StyleComboForm->LabelOfSize->Height + 5; for(int i=0;iCount;i++){ tNumber = (TLabel *)ListOfNumber->Items[i]; tNumber->Top = StyleComboForm->LabelOfNumber->Top + nextTop*(i/3); tNumber->Left = StyleComboForm->pnPattern->Left + (StyleComboForm->pnPattern->Width+4)*(i%3); tNumber->Caption = "No." + IntToStr(i+1); tPanel = (TPanel *)ListOfPanel->Items[i]; tPanel->Top = StyleComboForm->pnPattern->Top + nextTop*(i/3); tPanel->Left = StyleComboForm->pnPattern->Left + (StyleComboForm->pnPattern->Width+4)*(i%3); // tImage = (TPStretchImage *)ListOfImage->Items[i]; // tImage->Top = 4;//StyleComboForm->pnPattern->Top + nextTop*(i/3) + 4; // tImage->Left = 4;//StyleComboForm->pnPattern->Left + (StyleComboForm->pnPattern->Width+4)*(i%3) + 4; tSize = (TLabel *)ListOfSize->Items[i]; tSize->Top = StyleComboForm->LabelOfSize->Top + nextTop*(i/3); tSize->Left = StyleComboForm->pnPattern->Left + (StyleComboForm->pnPattern->Width+4)*(i%3); } } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::ResetPatternDataList() { TPatternDATA *patternData; if (!ListOfpData) return; while (ListOfpData->Count>0) { patternData = (TPatternDATA *)ListOfpData->Last(); if (patternData->RealImageBitmap) { delete patternData->RealImageBitmap; patternData->RealImageBitmap = NULL; } ListOfpData->Remove(patternData); delete patternData; patternData=NULL; } } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::ResetPanel() { TPStretchImage *tImage; TLabel *tNumber; TLabel *tSize; TPanel *tPanel; if (!ListOfPanel) return; while (ListOfPanel->Count>0) { tImage = (TPStretchImage *)ListOfImage->Last(); ListOfImage->Remove(tImage); delete tImage; tImage=NULL; tPanel = (TPanel *)ListOfPanel->Last(); ListOfPanel->Remove(tPanel); delete tPanel; tPanel=NULL; tNumber = (TLabel *)ListOfNumber->Last(); ListOfNumber->Remove(tNumber); delete tNumber; tNumber=NULL; tSize = (TLabel *)ListOfSize->Last(); ListOfSize->Remove(tSize); delete tSize; tSize=NULL; } } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::AddPatternColor() { // patternÀÇ °³¼ö°¡ º¯°æµÊ anyChanged = true; Byte *line; COLORREF tColor; TPStretchImage *Image = new TPStretchImage(StyleComboForm); TPanel *Panel = new TPanel(StyleComboForm); TLabel *Number = new TLabel(StyleComboForm); TLabel *Size = new TLabel(StyleComboForm); ListOfPanel->Add(Panel); int i = ListOfPanel->Count-1; // List Count´Â 1ºÎÅÍ ½ÃÀÛ AddPatternImage(Image, Number, Size, Panel); Image->Bitmap->Create(StyleComboForm->psImage->Width, StyleComboForm->psImage->Height, 24); tColor = PaletteForm->DIB256Palette->GetFGCOLORREF(Image->Bitmap->BitsPerPixel); Image->Bitmap->StartScanLine(); for (int y=0; yBitmap->Height; y++) { line=Image->Bitmap->GetScanLine(y); for (int x=0; xBitmap->Width; x++) { line[3*x] = (tColor >> 16) & 0xFF; line[3*x+1]= (tColor >> 8 ) & 0xFF; line[3*x+2]= (tColor ) & 0xFF; } Image->Bitmap->PutScanLine(y); } Image->Bitmap->StopScanLine(); Image->Repaint(); ListOfImage->Add(Image); ListOfNumber->Add(Number); ListOfSize->Add(Size); TPatternDATA *patternData; patternData = new TPatternDATA(24, tColor); ListOfpData->Add(patternData); ColorNumber++; } //--------------------------------------------------------------------------- TPStretchImage* __fastcall TPatternLibrary::GetPatternImage(int Num) { TPStretchImage *tImage; tImage = (TPStretchImage *)ListOfImage->Items[Num]; return tImage; } //--------------------------------------------------------------------------- TTexpiaBitmap* __fastcall TPatternLibrary::GetRealImageBitmap(int Num) { TPatternDATA *patternData; patternData = (TPatternDATA *)ListOfpData->Items[Num]; return patternData->RealImageBitmap; } //--------------------------------------------------------------------------- TColor __fastcall TPatternLibrary::GetColorBrush(int Num) { TPatternDATA *patternData; patternData = (TPatternDATA *)ListOfpData->Items[Num]; return (TColor)patternData->selectedColor; } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::ReloadDataFromFile(TPatternDATA *patterndata, TTexpiaBitmap *RealImageBitmap) { TPStretchImage *Image = new TPStretchImage(StyleComboForm); TPanel *Panel = new TPanel(StyleComboForm); TLabel *Number = new TLabel(StyleComboForm); TLabel *Size = new TLabel(StyleComboForm); ListOfPanel->Add(Panel); AddPatternImage(Image, Number, Size, Panel); if (patterndata->kindOfPattern == 0) // 0 : Image { Image->Bitmap->Create(RealImageBitmap->Width, RealImageBitmap->Height, 24); Image->Bitmap->Copy(RealImageBitmap, SRCCOPY); RatioCalculate(Image, RealImageBitmap, StyleComboForm->psImage->Width, StyleComboForm->psImage->Height); Image->Repaint(); ListOfImage->Add(Image); ListOfNumber->Add(Number); float ImageW, ImageH; ImageW = (float)RealImageBitmap->Width/CanvasInfor.DotsPerInch; ImageH = (float)RealImageBitmap->Height/CanvasInfor.DotsPerInch; if (MainImageForm->CurrentUnit==uCm) { int imageW, imageH; imageW = ImageW*2.54*10; imageH = ImageH*2.54*10; Size->Caption = FloatToStr((float)imageW/10) + " X " + FloatToStr((float)imageH/10); } else if (MainImageForm->CurrentUnit==uInch) { int imageW, imageH; imageW = ImageW*10; imageH = ImageH*10; Size->Caption = FloatToStr((float)imageW/10) + " X " + FloatToStr((float)imageH/10); } else { Size->Caption = IntToStr(RealImageBitmap->Width) + " X " + IntToStr(RealImageBitmap->Height); } ListOfSize->Add(Size); TPatternDATA *patternData; patternData = new TPatternDATA(patterndata->bpp, RealImageBitmap); ListOfpData->Add(patternData); PatternNumber++; } else { byte *line; Image->Bitmap->Create(StyleComboForm->psImage->Width, StyleComboForm->psImage->Height, 24); Image->Bitmap->StartScanLine(); for (int y=0; yBitmap->Height; y++) { line=Image->Bitmap->GetScanLine(y); for (int x=0; xBitmap->Width; x++) { line[3*x] = (patterndata->selectedColor >> 16) & 0xFF; line[3*x+1]= (patterndata->selectedColor >> 8 ) & 0xFF; line[3*x+2]= (patterndata->selectedColor ) & 0xFF; } Image->Bitmap->PutScanLine(y); } Image->Bitmap->StopScanLine(); Image->Repaint(); ListOfImage->Add(Image); ListOfNumber->Add(Number); ListOfSize->Add(Size); TPatternDATA *patternData; patternData = new TPatternDATA(patterndata->bpp, patterndata->selectedColor); ListOfpData->Add(patternData); ColorNumber++; } } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::GetSelectedPanelNumber(int &Number) { TPanel *tPanel; int i; for (i=0; iCount; i++) { tPanel=(TPanel *)ListOfPanel->Items[i]; if (tPanel->Color == clBlack) {Number=i; return;} } Number=-1; } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::SavePatternLibrary() { TCursor cur; TRegIniFile *RegIniFile; String DirectoryBin; String filename; HANDLE hFile = INVALID_HANDLE_VALUE; cur = Screen->Cursor; Screen->Cursor = crHourGlass; RegIniFile = new TRegIniFile(RegFilename); RegIniFile->RootKey = HKEY_LOCAL_MACHINE; RegIniFile->OpenKey(RegFilename + "\\",true); // yw DirectoryBin = RegIniFile->ReadString("Directory", "Bin", DefaultDir + "\\Bin"); filename = "PatternLibrary.cpl"; if ((hFile = CreateFile((DirectoryBin+"\\TexStylist\\"+filename).c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto fail; SaveToFile(hFile); CloseHandle(hFile); Screen->Cursor = cur; return; fail: if (hFile) CloseHandle(hFile); Screen->Cursor = cur; EXCEPTION_MESSAGE_OK(EC_FORM_NOT_CREATE); } //--------------------------------------------------------------------------- bool __fastcall TPatternLibrary::SaveToFile(HANDLE fh) { int PatternCount; TPatternDATA *patterndata; DWORD dwWrite; PatternCount = ListOfNumber->Count; if (!WriteFile(fh, &PatternCount, sizeof(int), &dwWrite, NULL)) goto fail; ////////// Pattern ÀúÀå for (int i = 0; i < PatternCount; i++) { // ¹®Á¦Á¡: ÆÐÅÏ¿¡ À̹ÌÁö°¡ ¾øÀ» ¼öµµ ÀÖ´Ù. À̰æ¿ì¸¦ »ý°¢ÇÏÁö ¾Ê°í // ÇÁ·Î±×·¥À» ®±â ¶§¹®¿¡ ¹®Á¦°¡ ¹ß»ýÇß´Ù. patterndata = (TPatternDATA *)ListOfpData->Items[i]; if (!WriteFile(fh, &patterndata->bpp, sizeof(WORD), &dwWrite, NULL)) goto fail; if (!WriteFile(fh, &patterndata->Width, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(fh, &patterndata->Height, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(fh, &patterndata->kindOfPattern, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(fh, &patterndata->selectedColor, sizeof(COLORREF), &dwWrite, NULL)) goto fail; if (!WriteFile(fh, &patterndata->isSelected, sizeof(bool), &dwWrite, NULL)) goto fail; if (PatternNumber > 0 && patterndata->kindOfPattern ==0) { patterndata->RealImageBitmap->SaveToTexpiaFile(fh, cmZLib); } } return true; fail: return false; } //--------------------------------------------------------------------------- bool __fastcall TPatternLibrary::LoadFromFile(HANDLE fh) { int PatternCount; TPatternDATA *patterndata; TTexpiaBitmap *bitmap; DWORD dwRead; if (!ReadFile(fh, &PatternCount, sizeof(int), &dwRead, NULL)) goto fail; ////////// Pattern ºÒ·¯¿À±â for (int i = 0; i < PatternCount; i++) { patterndata = new TPatternDATA; if (!ReadFile(fh, &patterndata->bpp, sizeof(WORD), &dwRead, NULL)) goto fail; if (!ReadFile(fh, &patterndata->Width, sizeof(int), &dwRead, NULL)) goto fail; if (!ReadFile(fh, &patterndata->Height, sizeof(int), &dwRead, NULL)) goto fail; if (!ReadFile(fh, &patterndata->kindOfPattern, sizeof(int), &dwRead, NULL)) goto fail; if (!ReadFile(fh, &patterndata->selectedColor, sizeof(COLORREF), &dwRead, NULL)) goto fail; if (!ReadFile(fh, &patterndata->isSelected, sizeof(bool), &dwRead, NULL)) goto fail; if (patterndata->kindOfPattern == 0) { bitmap = new TTexpiaBitmap; if (!bitmap->Create(patterndata->Width, patterndata->Height, patterndata->bpp)) goto fail; bitmap->LoadFromTexpiaFile(fh, cmZLib); ReloadDataFromFile(patterndata, bitmap); delete bitmap; } else ReloadDataFromFile(patterndata); delete patterndata; } return true; fail: delete bitmap; return false; } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::AddPatternInMainImage(TList *MainVecData, int pNum, int cNum, TStatusProgress *stProgress) // for test { TList *DataList = MainVecData; TVecData *data = NULL; int *checkColor, *checkImage; checkColor = new int[cNum]; checkImage = new int[pNum]; int sColorNum=0; int sImageNum=0; bool iFirst=true; bool cFirst=true; int check; for (int i = 0; i < DataList->Count; i++) { stProgress->Position +=1; data = (TVecData *)DataList->Items[i]; if (data->bPatternFill && data->nCount>2) // PatternFill À϶§ { if (!iFirst) { check = 0; for (int i=0; iisSameImage) check++; } if (check > 0) continue; else goto addImage; } iFirst=false; addImage: checkImage[sImageNum]=data->isSameImage; sImageNum++; TPStretchImage *Image = new TPStretchImage(StyleComboForm); TPanel *Panel = new TPanel(StyleComboForm); TLabel *Number = new TLabel(StyleComboForm); TLabel *Size = new TLabel(StyleComboForm); ListOfPanel->Add(Panel); AddPatternImage(Image, Number, Size, Panel); // Add Data in the List Image->Bitmap->Create(data->TBitmapSource->Width, data->TBitmapSource->Height, 24); Image->Bitmap->Copy(data->TBitmapSource, SRCCOPY); RatioCalculate(Image, data->TBitmapSource, StyleComboForm->psImage->Width, StyleComboForm->psImage->Height); Image->Repaint(); ListOfImage->Add(Image); ListOfNumber->Add(Number); float ImageW, ImageH; ImageW = (float)data->TBitmapSource->Width/CanvasInfor.DotsPerInch; ImageH = (float)data->TBitmapSource->Height/CanvasInfor.DotsPerInch; if (MainImageForm->CurrentUnit==uCm) { int imageW, imageH; imageW = ImageW*2.54*10; imageH = ImageH*2.54*10; Size->Caption = FloatToStr((float)imageW/10) + " X " + FloatToStr((float)imageH/10); } else if (MainImageForm->CurrentUnit==uInch) { int imageW, imageH; imageW = ImageW*10; imageH = ImageH*10; Size->Caption = FloatToStr((float)imageW/10) + " X " + FloatToStr((float)imageH/10); } else { Size->Caption = IntToStr(data->TBitmapSource->Width) + " X " + IntToStr(data->TBitmapSource->Height); } ListOfSize->Add(Size); TPatternDATA *patternData; patternData = new TPatternDATA(24, data->TBitmapSource); ListOfpData->Add(patternData); PatternNumber++; } else if (data->bFill) // ColorFill À϶§ { if (!cFirst) { check = 0; for (int i=0; iisSameColor) check++; } if (check > 0) continue; else goto addColor; } cFirst=false; addColor: checkColor[sColorNum]=data->isSameColor; sColorNum++; Byte *line; TPStretchImage *Image = new TPStretchImage(StyleComboForm); TPanel *Panel = new TPanel(StyleComboForm); TLabel *Number = new TLabel(StyleComboForm); TLabel *Size = new TLabel(StyleComboForm); ListOfPanel->Add(Panel); AddPatternImage(Image, Number, Size, Panel); Image->Bitmap->Create(StyleComboForm->psImage->Width, StyleComboForm->psImage->Height, 24); Image->Bitmap->StartScanLine(); for (int y=0; yBitmap->Height; y++) { line=Image->Bitmap->GetScanLine(y); for (int x=0; xBitmap->Width; x++) { line[3*x] = (data->Brush >> 16) & 0xFF; line[3*x+1]= (data->Brush >> 8 ) & 0xFF; line[3*x+2]= (data->Brush ) & 0xFF; } Image->Bitmap->PutScanLine(y); } Image->Bitmap->StopScanLine(); Image->Repaint(); ListOfImage->Add(Image); ListOfNumber->Add(Number); ListOfSize->Add(Size); TPatternDATA *patternData; patternData = new TPatternDATA(24, data->Brush); ListOfpData->Add(patternData); ColorNumber++; } } delete[] checkColor; delete[] checkImage; } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::psImageMouseDown(int i) { TLabel *tNumber; TLabel *tSize; TPanel *tPanel; TPStretchImage *tImage; TPatternDATA *tPtData; if(i!=-1){ tPtData = (TPatternDATA *)ListOfpData->Items[i]; if (tPtData->kindOfPattern == 0) { PatternNumber--;// 0 : Image if (tPtData->RealImageBitmap) { delete tPtData->RealImageBitmap; tPtData->RealImageBitmap=NULL; } ListOfpData->Remove(tPtData); delete tPtData; tPtData=NULL; } else { ListOfpData->Remove(tPtData); delete tPtData; tPtData=NULL; ColorNumber--;// 1: Color } // patternÀÇ °³¼ö°¡ º¯°æµÊ anyChanged = true; tNumber = (TLabel *)ListOfNumber->Items[i]; ListOfNumber->Remove(tNumber); delete tNumber; tNumber=NULL; tSize = (TLabel *)ListOfSize->Items[i]; ListOfSize->Remove(tSize); delete tSize; tSize=NULL; tImage = (TPStretchImage *)ListOfImage->Items[i]; ListOfImage->Remove(tImage); delete tImage; tImage=NULL; tPanel = (TPanel *)ListOfPanel->Items[i]; ListOfPanel->Remove(tPanel); delete tPanel; tPanel=NULL; ArrangePanel(); } } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::psImageMouseUp(int i) { TPanel *tPanel; TPatternDATA *tPtData; for (int j=0; jCount; j++) { if (j==i) { tPanel = (TPanel *)ListOfPanel->Items[j]; tPtData = (TPatternDATA *)ListOfpData->Items[j]; tPanel->Color = clBlack; tPtData->isSelected = true; } else { tPanel = (TPanel *)ListOfPanel->Items[j]; tPtData = (TPatternDATA *)ListOfpData->Items[j]; tPanel->Color = clWhite; tPtData->isSelected = false; } } } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::sbClearLibraryClick() { // PatternÀÇ °³¼ö°¡ º¯°æµÊ anyChanged = true; if (ListOfImage->Count > 0) ResetPanel(); ResetPatternDataList(); // Reset Pattern Data Class - for test ColorNumber = 0; PatternNumber = 0; // ÃʱâÈ­ } //--------------------------------------------------------------------------- void __fastcall TPatternLibrary::sbBeforeLibraryClick() { TCursor cur; TRegIniFile *RegIniFile; String DirectoryBin; String filename; HANDLE hFile = INVALID_HANDLE_VALUE; cur = Screen->Cursor; Screen->Cursor = crHourGlass; RegIniFile = new TRegIniFile(RegFilename); RegIniFile->RootKey = HKEY_LOCAL_MACHINE; RegIniFile->OpenKey(RegFilename + "\\",true); // yw DirectoryBin = RegIniFile->ReadString("Directory", "Bin", DefaultDir + "\\Bin"); filename = "PatternLibrary.cpl"; if ((hFile = CreateFile((DirectoryBin+"\\TexStylist\\"+filename).c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto fail; sbClearLibraryClick(); LoadFromFile(hFile); CloseHandle(hFile); Screen->Cursor = cur; return; fail: if (hFile) CloseHandle(hFile); // IDS_COMBOMSGBOX3 : »ç¿ëÇÑ ÆÐÅÏÀÌ ¾ø½À´Ï´Ù. Application->MessageBox(IDS_COMBOMSGBOX3.c_str(), L"Information", MB_ICONINFORMATION); Screen->Cursor = cur; } //---------------------------------------------------------------------------