using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 임시 파일 경로
/// </summary>
private string temporaryFilePath = null;
/// <summary>
/// 원본 이미지
/// </summary>
private Image originalImage = null;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
#region 이벤트를 설정한다.
Load += Form_Load;
this.openMenuItem.Click += openMenuItem_Click;
this.saveMenuItem.Click += saveMenuItem_Click;
this.exitMenuItem.Click += exitMenuItem_Click;
this.compressionLevelComboBox.SelectedIndexChanged += compressionLevelComboBox_SelectedIndexChanged;
this.maximumFileSizeTextBox.TextChanged += maximumFileSizeTextBox_TextChanged;
this.runButton.Click += runButton_Click;
#endregion
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 폼 로드시 처리하기 - Form_Load(sender, e)
/// <summary>
/// 폼 로드시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_Load(object sender, EventArgs e)
{
this.compressionLevelComboBox.Text = "75";
this.temporaryFilePath = Path.Combine(Application.StartupPath, "__temporary.jpg");
}
#endregion
#region 파일 열기 메뉴 항목 클릭시 처리하기 - openMenuItem_Click(sender, e)
/// <summary>
/// 파일 열기 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void openMenuItem_Click(object sender, EventArgs e)
{
if(this.openFileDialog.ShowDialog() == DialogResult.OK)
{
this.originalSizeTextBox.Clear();
this.resultCompressionLevelTextBox.Clear();
this.resultFileSizeTextBox.Clear();
try
{
this.originalImage = ImageHelper.LoadBitmap(this.openFileDialog.FileName);
this.canvasPictureBox.Image = this.originalImage;
this.saveMenuItem.Enabled = true;
this.runButton.Enabled = true;
this.originalSizeTextBox.Text = ImageHelper.GetFileSize(this.openFileDialog.FileName).ToFileSizeString();
}
catch(Exception exception)
{
MessageBox.Show
(
this,
"파일 로드시 에러가 발생했습니다.\r\n" + this.openFileDialog.FileName + "\r\n" + exception.Message,
"에러",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
}
}
#endregion
#region 파일 저장하기 메뉴 항목 클릭시 처리하기 - saveMenuItem_Click(sender, e)
/// <summary>
/// 파일 저장하기 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void saveMenuItem_Click(object sender, EventArgs e)
{
if(this.originalImage == null)
{
return;
}
if(this.saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
if(this.compressionLevelRadioButton.Checked)
{
int level = int.Parse(this.compressionLevelComboBox.Text);
ImageHelper.SaveJPGImage(this.originalImage, this.saveFileDialog.FileName, level);
}
else
{
long maximumFileSize = 1024 * long.Parse(this.maximumFileSizeTextBox.Text);
int level = ImageHelper.SaveJPGImage(this.originalImage, this.saveFileDialog.FileName, maximumFileSize);
}
}
catch(Exception exception)
{
MessageBox.Show
(
this,
"파일 저장시 에러가 발생했습니다.\r\n" + this.saveFileDialog.FileName + "\r\n" + exception.Message,
"에러",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
}
}
#endregion
#region 종료 메뉴 항목 클릭시 처리하기 - exitMenuItem_Click(sender, e)
/// <summary>
/// 종료 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void exitMenuItem_Click(object sender, EventArgs e)
{
Close();
}
#endregion
#region 압축 레벨 콤보 박스 선택 인덱스 변경시 처리하기 - compressionLevelComboBox_SelectedIndexChanged(sender, e)
/// <summary>
/// 압축 레벨 콤보 박스 선택 인덱스 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void compressionLevelComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.compressionLevelRadioButton.Checked = true;
}
#endregion
#region 실행 버튼 클릭시 처리하기 - runButton_Click(sender, e)
/// <summary>
/// 실행 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void runButton_Click(object sender, EventArgs e)
{
try
{
Cursor = Cursors.WaitCursor;
if(this.compressionLevelRadioButton.Checked)
{
int level = int.Parse(this.compressionLevelComboBox.Text);
ImageHelper.SaveJPGImage(this.originalImage, this.temporaryFilePath, level);
this.resultCompressionLevelTextBox.Text = level.ToString();
}
else
{
long maximumFileSize = 1024 * long.Parse(this.maximumFileSizeTextBox.Text);
int level = ImageHelper.SaveJPGImage(this.originalImage, this.temporaryFilePath, maximumFileSize);
this.resultCompressionLevelTextBox.Text = level.ToString();
}
this.resultFileSizeTextBox.Text = ImageHelper.GetFileSize(this.temporaryFilePath).ToFileSizeString();
this.canvasPictureBox.Image = ImageHelper.LoadBitmap(this.temporaryFilePath);
}
catch(Exception exception)
{
MessageBox.Show
(
this,
"실행시 에러가 발생했습니다.\r\n" + exception.Message,
"에러",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
finally
{
Cursor = Cursors.Default;
}
}
#endregion
#region 최대 파일 크기 텍스트 박스 텍스트 변경시 처리하기 - maximumFileSizeTextBox_TextChanged(sender, e)
/// <summary>
/// 최대 파일 크기 텍스트 박스 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void maximumFileSizeTextBox_TextChanged(object sender, EventArgs e)
{
this.maximumFileSizeRadioButton.Checked = true;
}
#endregion
}
}