⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcjpeg.cpp

📁 Jpeg编解码器的源代码
💻 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 + -