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

📄 unit1.~cpp

📁 Jpeg编解码器的源代码
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

#include <fstream>
#include <cerrno>
using namespace Colosseum ;
using namespace std ;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ProgressFunction (Colosseum::BitmapImageCoder &coder,
                              void *data,
                              unsigned int currentpass,
                              unsigned int passcount,
                              unsigned int progress,
                              bool &cancel)
{
  /*unsigned int value = (100 * (currentpass - 1) + progress)
                               / passcount ;
  //MainForm->ProgressBar->Position = value ;
  if (progress == 100 )
  {
    coder.updateImage () ;
    image_type = Colosseum::JpegImage ;
    PaintBox1->SetBounds (0, 0, image.getWidth (),
                                image.getHeight ()) ;
    LoadBitmapInfoHeader () ;
    PaintBox1->Refresh () ;
  }
  Application->ProcessMessages () ;  */
  return ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(!OpenDialog1->Execute())return;
  try
  {
    ReadImage(OpenDialog1->FileName) ;
  }
  catch (...)
  {
    throw ;
  }
  if (GetImageType () == Colosseum::UnknownImage)
  {
    throw Exception ("Unknown or Invalid Image Format") ;
  }

}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------
void __fastcall::TForm1::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 ()) ;
  }


  LoadBitmapInfoHeader () ;

  PaintBox1->SetBounds (150,50, image.getWidth (), image.getHeight ()) ;
  return ;
}
//----------------------------------------------------------------------
void __fastcall::TForm1::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 __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
  if (image_type == Colosseum::UnknownImage)
    return ;

  SetDIBitsToDevice (PaintBox1->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 __fastcall TForm1::Button2Click(TObject *Sender)
{

  if (!SaveDialog1->Execute ())
    return ;

  String filename =SaveDialog1->FileName ;
  String ext = ExtractFileExt(filename) ;
  if (ext == "")
  {
    switch (SaveDialog1->FilterIndex)
    {
    case 1: filename += ".JPG" ; break ;
    case 2: filename += ".BMP" ; break ;
    }
  }
  Colosseum::BitmapImageEncoder *encoder ;
  switch (SaveDialog1->FilterIndex)
  {
  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 __fastcall TForm1::Button3Click(TObject *Sender)
{
   //
   EditableBitmapImage myimage ;
   AnsiString filename="d:\\ftp\\76029.jpg";
   AnsiString filename2="d:\\ftp\\76029_save.bmp";
   Colosseum::ReadImage2 (filename.c_str (),myimage) ;
   //EditableBitmapImage myimage2;
   //myimage2.setSize(myimage.getWidth()-4,myimage.getHeight()-4);
   //myimage2.mergeImage(myimage,-4,-4);
   Colosseum::BitmapImageEncoder *encoder ;
   encoder->writeImageFile (filename2.c_str (),myimage) ;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -