📄 editorsstylesdemoconvert.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdlib.h>
#pragma hdrstop
#include "EditorsStylesDemoConvert.h"
#include "Jpeg.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cxContainer"
#pragma link "cxControls"
#pragma link "cxEdit"
#pragma link "cxMemo"
#pragma link "cxPropertiesStore"
#pragma link "cxTextEdit"
#pragma link "EditorsStylesDemoBase"
#pragma link "cxButtons"
#pragma link "cxCheckBox"
#pragma link "cxDropDownEdit"
#pragma link "cxGroupBox"
#pragma link "cxImage"
#pragma link "cxLabel"
#pragma link "cxLookAndFeelPainters"
#pragma link "cxMaskEdit"
#pragma link "cxProgressBar"
#pragma link "cxSpinButton"
#pragma link "cxSpinEdit"
#pragma link "cxSplitter"
#pragma link "cxTrackBar"
#pragma resource "*.dfm"
TEditorsStylesDemoConvertFrame *EditorsStylesDemoConvertFrame;
//---------------------------------------------------------------------------
__fastcall TEditorsStylesDemoConvertFrame::TEditorsStylesDemoConvertFrame(TComponent* Owner)
: TEditorsStylesDemoBaseFrame(Owner)
{
FBitmap = new Graphics::TBitmap();
if (cxImage->Picture) {
cxImage->Width = cxImage->Picture->Width;
cxImage->Height = cxImage->Picture->Height;
}
HintStyle = hcstLightSlideLeft;
FFileName = "Untitled";
FDisplayStyle = shtBrick;
FTempDisplayStyle = shtBrick;
btnPreviewClick(this);
}
//---------------------------------------------------------------------------
__fastcall TEditorsStylesDemoConvertFrame::~TEditorsStylesDemoConvertFrame()
{
delete FBitmap;
}
//---------------------------------------------------------------------------
void TEditorsStylesDemoConvertFrame::ChangeDisplayStyle(TcxStyleSheetType ADisplayStyle)
{
TEditorsStylesDemoBaseFrame::ChangeDisplayStyle(ADisplayStyle);
AdjustTrackBarThumb(ADisplayStyle, cxTrackBar, FBitmap);
}
//---------------------------------------------------------------------------
TColor TEditorsStylesDemoConvertFrame::GetStyleBackgroundColor()
{
return (gbConvertingOptions->Color);
}
//---------------------------------------------------------------------------
String __fastcall TEditorsStylesDemoConvertFrame::Name()
{
return "Image Processing";
}
//---------------------------------------------------------------------------
String __fastcall TEditorsStylesDemoConvertFrame::BriefName()
{
return "Image";
}
//---------------------------------------------------------------------------
String TEditorsStylesDemoConvertFrame::StylesIniPath()
{
return "StylesFrmConvert\\";
}
//---------------------------------------------------------------------------
bool TEditorsStylesDemoConvertFrame::MenuOpenFileVisible()
{
return true;
}
//---------------------------------------------------------------------------
void TEditorsStylesDemoConvertFrame::OpenFile(TObject* Sender)
{
btnLoadImageClick(NULL);
}
//---------------------------------------------------------------------------
String TEditorsStylesDemoConvertFrame::Description()
{
return "Image Processing Notes";
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::btnLoadImageClick(
TObject *Sender)
{
if (OpenDialog->Execute()) {
cxImage->Picture->LoadFromFile(OpenDialog->FileName);
FFileName = OpenDialog->FileName;
DoOnFileNameChanged();
cxImage->Width = cxImage->Picture->Width;
cxImage->Height = cxImage->Picture->Height;
}
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::tbImageQualityPropertiesChange(
TObject *Sender)
{
sbImageQuality->Value = tbImageQuality->Position;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::cxTrackBarPropertiesChange(
TObject *Sender)
{
cxImage->Width = div(cxImage->Picture->Width * cxTrackBar->Position, 100).quot;
cxImage->Height = div(cxImage->Picture->Height * cxTrackBar->Position, 100).quot;
cxProgressBar->Position = cxTrackBar->Position;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::cxTextEditPropertiesChange(
TObject *Sender)
{
if (cxTextEdit->Text != "") {
int Val = StrToInt(cxTextEdit->Text);
cxTrackBar->Properties->Max = Val;
cxProgressBar->Properties->Max = Val;
cxProgressBar->Properties->OverloadValue = 100;
cxProgressBar->Properties->PeakValue = 100;
}
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::sbImageQualityPropertiesChange(
TObject *Sender)
{
tbImageQuality->Position = sbImageQuality->Value;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::cbScalePropertiesChange(
TObject *Sender)
{
TJPEGScale JPEGScale = jsFullSize;
if ((String)((TcxComboBox*)Sender)->EditValue == "Full Size")
JPEGScale = jsFullSize; else
if ((String)((TcxComboBox*)Sender)->EditValue == "Half")
JPEGScale = jsHalf; else
if ((String)((TcxComboBox*)Sender)->EditValue == "Quarter")
JPEGScale = jsQuarter; else
if ((String)((TcxComboBox*)Sender)->EditValue == "Eighth")
JPEGScale = jsEighth;
((TJPEGImage*)imgPreview->Picture->Graphic)->Scale = JPEGScale;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::btnPreviewClick(TObject *Sender)
{
TJPEGImage* J = new TJPEGImage();
ScrollBox1->Visible = false;
try {
J->Assign(cxImage->Picture->Graphic);
TJPEGOptions AJPEGOptions = GetJPEGOptions();
J->CompressionQuality = AJPEGOptions.CompressionQuality;
J->ProgressiveEncoding = AJPEGOptions.ProgressiveEncoding;
J->ProgressiveDisplay = true;
J->Compress();
J->Smoothing = !J->Smoothing;
imgPreview->Picture->Assign(J);
((TJPEGImage*)imgPreview->Picture->Graphic)->Grayscale = AJPEGOptions.Grayscale;
((TJPEGImage*)imgPreview->Picture->Graphic)->ProgressiveDisplay = true;
cbScalePropertiesChange(cbScale);
}
__finally {
ScrollBox1->Visible = true;
delete J;
}
}
//---------------------------------------------------------------------------
TJPEGOptions __fastcall TEditorsStylesDemoConvertFrame::GetJPEGOptions()
{
TJPEGOptions Result;
Result.CompressionQuality = meCompressionQuality->EditValue;
Result.Grayscale = cbGrayScale->Checked;
Result.ProgressiveEncoding = lbProgressive->Checked;
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::bntConvertClick(TObject *Sender)
{
if (SaveDialog->Execute())
ConvertBitmapToJPEG(cxImage->Picture->Bitmap, SaveDialog->FileName, GetJPEGOptions());
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::btnGetDrawParams(
TcxCustomButton *Sender, TcxButtonState AState, TColor &AColor,
TFont *AFont)
{
AFont->Color = Sender->Font->Color;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::sbScalePropertiesEditValueChanged(
TObject *Sender)
{
cbScale->ItemIndex = sbScale->Value;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::cxTrackBarPropertiesDrawThumb(
TObject *Sender, TcxCanvas *ACanvas, const TRect &ARect)
{
ACanvas->Draw(ARect.Left, ARect.Top, FBitmap);
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::cxTrackBarPropertiesGetThumbRect(
TObject *Sender, TRect &ARect)
{
ARect = FBitmap->Canvas->ClipRect;
}
//---------------------------------------------------------------------------
void __fastcall TEditorsStylesDemoConvertFrame::AdjustTrackBarThumb(
TcxStyleSheetType AStyleSheetType, TcxTrackBar* ATrackBar,
Graphics::TBitmap* ABitmap)
{
const String AThumbImagesPath = "StylesFrmStylePalette\\";
switch (AStyleSheetType) {
case shtWood:
{
ABitmap->LoadFromFile(AThumbImagesPath + "Wood.bmp");
ATrackBar->Properties->ThumbType = cxttCustom;
break;
}
case shtDeepSea:
{
ABitmap->LoadFromFile(AThumbImagesPath + "DeepSea.bmp");
ATrackBar->Properties->ThumbType = cxttCustom;
break;
}
default : ATrackBar->Properties->ThumbType = cxttRegular;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -