📄 tcjpeg.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TCJpeg.h"
#include <fstream>
#include <cerrno>
//---------------------------------------------------------------------------
#pragma package(smart_init)
void TCJpeg::ReadImage (const String &filename)
{
image_type = Colosseum::UnknownImage ;
try
{
image_type = Colosseum::ReadImage2 (
filename.c_str (),
image) ;
}
catch (std::exception &ee)
{
throw Exception (ee.what ()) ;
}
return ;
}
//----------------------------------------------------------------------
void TCJpeg::LoadBitmapInfoHeader ()
{
image_header.bV4Size = sizeof (BITMAPV4HEADER) ;
image_header.bV4Width = image.getWidth () ;
image_header.bV4Height = -image.getHeight () ;
image_header.bV4Planes = 1 ;
image_header.bV4BitCount = 32 ;
image_header.bV4V4Compression = BI_BITFIELDS ;
image_header.bV4SizeImage = 0 ;
image_header.bV4XPelsPerMeter = 0 ;
image_header.bV4YPelsPerMeter = 0 ;
image_header.bV4ClrUsed = 0 ;
image_header.bV4ClrImportant = 0 ;
image_header.bV4BlueMask = 0xFFU ;
image_header.bV4GreenMask = 0xFF00U ;
image_header.bV4RedMask = 0xFF0000U ;
image_header.bV4AlphaMask = 0xFF000000U ;
return ;
}
//---------------------------------------------------------------------
void TCJpeg::ShowImage (TImage *Image)
{
LoadBitmapInfoHeader();
if (image_type == Colosseum::UnknownImage)
return ;
Image->SetBounds (Image->Left,Image->Top, image.getWidth (), image.getHeight ()) ;
SetDIBitsToDevice (Image->Canvas->Handle,
0,
0,
image.getWidth (),
image.getHeight (),
0,
0,
0,
image.getHeight (),
&image [0],
reinterpret_cast<BITMAPINFO *>(&image_header),
DIB_RGB_COLORS) ;
return ;
}
//-----------------------------------------------------------------------
void TCJpeg::SaveImage(const String &filename,int type)
{
Colosseum::BitmapImageEncoder *encoder ;
switch (type)
{
case 1:
encoder = &jpeg_encoder ;
break ;
case 2:
encoder = &bmp_encoder ;
break ;
}
//encoder->setProgressFunction (ProgressFunction, NULL) ;
try
{
encoder->writeImageFile (filename.c_str (),GetImage ()) ;
}
catch (std::exception &ee)
{
throw Exception (ee.what ()) ;
}
return ;
}
//-------------------------------------------------------------------------
void TCJpeg::SetGammaValue (double value)
{
image.GammaCorrect (value) ;
return ;
}
//------------------------------------------------------------------------
void TCJpeg::ToGrayscale ()
{
image.ToGrayscale () ;
return ;
}
//------------------------------------------------------------------------
void TCJpeg::SetAlpha (unsigned int value)
{
BitmapImage::Pixel *pixel = &image [0] ;
for (unsigned int ii = 0 ; ii < image.getWidth () * image.getHeight () ; ++ ii)
pixel [ii].alpha = value ;
return ;
}
//------------------------------------------------------------------------
void TCJpeg::SetQuality(unsigned int quality)
{
if (quality < 1 || quality > 100)
throw Exception ("Invalid Quality Value") ;
jpeg_encoder.setQuality (quality) ;
return;
}
//-----------------------------------------------------------------------
void TCJpeg::SetProgressive(bool value)
{
jpeg_encoder.setProgressive(value) ;
return;
}
//-----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -