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

📄 unit1.pas

📁 图象处理的一些相关内容 不是很难的,实现简单,希望对大家有帮助
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  STGM_SHARE_EXCLUSIVE,0,0, stgSmallImage));


  //在根存储stgRoot下创建子存储stgLargeImage
  OleCheck(stgRoot.CreateStorage('LargeImage',STGM_CREATE or STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,0,0, stgLargeImage));

end;


procedure TForm1.ConvertImageToThumb(AImageFileName: string;
  AThumbBmp: Tbitmap);
var
  ThumbBmpLeft:integer;
  ThumbBmpTop:integer;
  ThumbBmpHeight:integer;
  ThumbBmpWidth:integer;

begin
      if IsJpgFile(AImageFileName) then
      try
        jpgtobmp(AImageFileName,FThumbJpg,FOriginalBmp);

        if FOriginalBmp.Height>=FOriginalBmp.Width then
        begin
          ThumbBmpWidth:=64*FOriginalBmp.Width div FOriginalBmp.Height;
          ThumbBmpLeft:=(64-ThumbBmpWidth ) div 2;

          AThumbBmp.Canvas.Brush.Color :=clBtnFace;
          AThumbBmp.Canvas.FillRect(AThumbBmp.Canvas.ClipRect);

          DrawPanel(AThumbBmp.Canvas,0,0,79,79,RaisedPanel);
          DrawPanel(AThumbBmp.Canvas,7+ThumbBmpLeft,7,ThumbBmpWidth+1,64,LoweredPanel);
          AThumbBmp.Canvas.StretchDraw(Rect(8+ThumbBmpLeft,8,8+ThumbBmpLeft+ThumbBmpWidth,71),FOriginalBmp);

          {***************8}
        end
        else
        begin
          ThumbBmpHeight:=64*FOriginalBmp.Height div FOriginalBmp.Width;
          ThumbBmpTop:=(64-ThumbBmpHeight ) div 2;

          AThumbBmp.Canvas.Brush.Color :=clBtnFace;
          AThumbBmp.Canvas.FillRect(AThumbBmp.Canvas.ClipRect);

          DrawPanel(AThumbBmp.Canvas,0,0,79,79,RaisedPanel);
          DrawPanel(AThumbBmp.Canvas,7,7+ThumbBmpTop,64,ThumbBmpHeight+1,LoweredPanel);
          AThumbBmp.Canvas.StretchDraw(Rect(8,8+ThumbBmpTop,71,8+ThumbBmpTop+ThumbBmpHeight),FOriginalBmp);


          {*****************}
        end;


      except
        MessageDlg('读取文件:'+AImageFileName+'时发生错误!'+#13
         +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
      end
      else
        try
          FOriginalBmp.LoadFromFile(AImageFileName);
          if FOriginalBmp.Height>=FOriginalBmp.Width then
          begin
            ThumbBmpWidth:=64*FOriginalBmp.Width div FOriginalBmp.Height;
            ThumbBmpLeft:=(64-ThumbBmpWidth ) div 2;

            AThumbBmp.Canvas.Brush.Color :=clBtnFace;
            AThumbBmp.Canvas.FillRect(AThumbBmp.Canvas.ClipRect);

            DrawPanel(AThumbBmp.Canvas,0,0,79,79,RaisedPanel);
            DrawPanel(AThumbBmp.Canvas,7+ThumbBmpLeft,7,ThumbBmpWidth+1,64,LoweredPanel);
            AThumbBmp.Canvas.StretchDraw(Rect(8+ThumbBmpLeft,8,8+ThumbBmpLeft+ThumbBmpWidth,71),FOriginalBmp);


            {************}
          end
          else
          begin
            ThumbBmpHeight:=64*FOriginalBmp.Height div FOriginalBmp.Width;
            ThumbBmpTop:=(64-ThumbBmpHeight ) div 2;

            AThumbBmp.Canvas.Brush.Color :=clBtnFace;
            AThumbBmp.Canvas.FillRect(AThumbBmp.Canvas.ClipRect);

            DrawPanel(AThumbBmp.Canvas,0,0,79,79,RaisedPanel);
            DrawPanel(AThumbBmp.Canvas,7,7+ThumbBmpTop,64,ThumbBmpHeight+1,LoweredPanel);
            AThumbBmp.Canvas.StretchDraw(Rect(8,8+ThumbBmpTop,71,8+ThumbBmpTop+ThumbBmpHeight),FOriginalBmp);


            {*************}
          end;


        except
          MessageDlg('读取文件:'+AImageFileName+'时发生错误!'+#13
           +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
        end;

end;


procedure TForm1.AddSmallImage(AStructureStorageFileName,
  ASmallImageFileName: string; ABmp: Tbitmap);
var
  stgRoot:IStorage;
  stgSmallImage:IStorage;

  stmSmallImage:IStream;

  OleStream:Tolestream;
begin

  //打开结构化存储文件,返回根存储stgRoot
  OleCheck(StgOpenStorage(StringToOleStr(AStructureStorageFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));



  //在根存储stgRoot下打开子存储stgSmallImage
  OleCheck(stgRoot.OpenStorage('SmallImage',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0, stgSmallImage));

  //在子存储stgSmallImage下创建流
  OleCheck(stgSmallImage.CreateStream(StringToOleStr(ASmallImageFileName),STGM_CREATE or STGM_READWRITE or
    STGM_SHARE_EXCLUSIVE,0,0, stmSmallImage));


  OleStream:=TOleStream.Create(stmSmallImage);
  try
    ABmp.SaveToStream(OleStream);
  finally
    OleStream.Free;
  end;

end;


procedure TForm1.AddLargeImage(AStructureStorageFileName,
  ALargeImageFileName: string);
var
  stgRoot:IStorage;
  stgLargeImage:IStorage;

  stmLargeImage:IStream;

  OleStream:Tolestream;
begin

  //打开结构化存储文件,返回根存储stgRoot
  OleCheck(StgOpenStorage(StringToOleStr(AStructureStorageFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));



  //在根存储stgRoot下打开子存储stgSmallImage
  OleCheck(stgRoot.OpenStorage('LargeImage',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0, stgLargeImage));

  //在子存储stgLargeImage下创建流
  OleCheck(stgLargeImage.CreateStream(StringToOleStr(ExtractFileName(ALargeImageFileName)),STGM_CREATE or STGM_READWRITE or
    STGM_SHARE_EXCLUSIVE,0,0, stmLargeImage));

  if  LowerCase(ExtractFileExt(ALargeImageFileName))='.bmp' then
  begin
    FOriginalBmp.LoadFromFile(ALargeImageFileName);
    OleStream:=TOleStream.Create(stmLargeImage);
    try
      FOriginalBmp.SaveToStream(OleStream);
    finally
      OleStream.Free;
    end;
  end
  else if  (LowerCase(ExtractFileExt(ALargeImageFileName))='.jpg') or
    (LowerCase(ExtractFileExt(ALargeImageFileName))='.jpeg') then
  begin
    FOriginalJpeg.LoadFromFile(ALargeImageFileName);
    OleStream:=TOleStream.Create(stmLargeImage);
    try
      FOriginalJpeg.SaveToStream(OleStream);
    finally
      OleStream.Free;
    end;
  end;

end;


procedure TForm1.FormCreate(Sender: TObject);
var
  str:string;
begin
  FImageFileList:=TStringList.Create;
  FThumbBmp:=TBitmap.Create;
  //缩略图的边框为:80*80,显示图片大小为:64*64
  FThumbBmp.Height:=80;
  FThumbBmp.Width:=80;
  FThumbBmp.PixelFormat:=pf24bit;

  FOriginalBmp:=Tbitmap.Create;
  FOriginalJpeg:=TJpegImage.Create;
  FThumbJpg:=TJpegImage.Create;


  CheckBox1.Checked:=false;
  label1.Enabled:=false;
  label2.Enabled:=false;
  edit3.Enabled:=false;
  edit4.Enabled:=false;
  self.Top:=(screen.Height-self.Height) div 2;
  self.Left:=(screen.Width-self.Width) div 2;

  if  ParamCount>0 then
  begin
    edit7.Text:=ParamStr(1);
    str:=ExtractFileName(ParamStr(1));
    str:=copy(str,1,pos('.',str)-1);
    try
      MkDir(ExtractFilePath(ParamStr(1))+str);
    except
      showmessage('创建目录'+ExtractFilePath(ParamStr(1))+str+'发生错误!');
      exit; 

    end;
    edit6.Text:=ExtractFilePath(ParamStr(1))+str;

    PageControl1.ActivePage:=PageControl1.Pages[1];

   

  end;


end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FImageFileList.Free;

  FThumbBmp.Free;
  FOriginalBmp.Free;
  FOriginalJpeg.Free;
  FThumbJpg.Free
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  label1.Enabled:=CheckBox1.Checked;
  label2.Enabled:=CheckBox1.Checked;
  edit3.Enabled:=CheckBox1.Checked;
  edit4.Enabled:=CheckBox1.Checked;
  if CheckBox1.Checked then
    edit3.SetFocus;

end;

procedure TForm1.ButtonOpenSSPFileClick(Sender: TObject);
begin
if OpenDialog1.Execute then
  edit7.Text:=OpenDialog1.FileName;

end;

procedure TForm1.ButtonSelectOutPutDirClick(Sender: TObject);
var
  dir:string;
begin
  dir:='c:\';
  if SelectDirectory( dir,[sdAllowCreate, sdPerformCreate, sdPrompt],0) then
  edit6.Text:=dir;
end;

procedure TForm1.ButtonBeginExtractPackageClick(Sender: TObject);
begin
  if not FileExists(edit7.Text) then
  begin
    showmessage('文件'+edit7.Text+'不存在!');
    exit;
  end;

  if not DirectoryExists(edit6.Text) then
  begin
    showmessage('目录'+edit6.Text+'不存在!');
    exit;
  end;

  if IsRequrePassWord(edit7.Text) then
  begin
    FormPassword.EditPassword.Text:='';
    FormPassword.ShowModal;
    if FormPassword.IsCancel then
      exit;

    //FormPassword.EditPassword.SetFocus;

    if not IsCorrectPassWord(edit7.Text,FormPassword.EditPassword.Text) then
    begin
      showmessage('密码错误!');
      exit;
    end;

  end;


  //showmessage('total:'+inttostr(GetTotalImageFileNumInSSP(edit7.Text)));
  ProgressBar2.Max:=GetTotalImageFileNumInSSP(edit7.Text);

  ExtractSSPFile(edit7.Text,edit6.Text,ProgressBar2);
  ProgressBar2.Visible:=false;
  showmessage('解包成功!');
end;

procedure TForm1.ExtractSSPFile(SSPFileName, OutPutDir: string;
  AProgressBar:TProgressBar);
var
  stgRoot:IStorage;
  stgLargeImage:IStorage;

  stmLargeImage:IStream;

  OleStream:Tolestream;

  EnumStatStg:IEnumStatStg;
  StatStg:TStatStg;
  s:string;
  bmp:Tbitmap;
  jpg:TjpegImage;
  i:integer;
begin
  if OutPutDir[length(OutPutDir)]<>'\' then
    OutPutDir:=OutPutDir+'\';

  //打开结构化存储文件,返回根存储stgRoot
  OleCheck(StgOpenStorage(StringToOleStr(SSPFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));

  //在根存储stgRoot下打开子存储stgLargeImage
  OleCheck(stgRoot.OpenStorage('LargeImage',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0, stgLargeImage));

  OleCheck(stgLargeImage.EnumElements(0,nil,0,EnumStatStg));

  bmp:=Tbitmap.Create;
  bmp.PixelFormat:=pf24bit;
  jpg:=TjpegImage.Create;

  i:=0;
  while EnumStatStg.Next(1,StatStg,nil)=S_OK do
  begin
    if StatStg.dwType=STGTY_STREAM then
    begin

      OleCheck(stgLargeImage.OpenStream(StatStg.pwcsName,nil,STGM_READWRITE or
        STGM_SHARE_EXCLUSIVE,0,stmLargeImage));

      if LowerCase(ExtractFileExt(StatStg.pwcsName))='.bmp' then
      begin
        OleStream:=TOleStream.Create(stmLargeImage);
        try
          bmp.LoadFromStream(OleStream);
          bmp.SaveToFile(OutPutDir+StatStg.pwcsName);
        finally
         OleStream.Free;
        end;
      end
      else if (LowerCase(ExtractFileExt(StatStg.pwcsName))='.jpg') or
        (LowerCase(ExtractFileExt(StatStg.pwcsName))='.jpeg') then
      begin
        OleStream:=TOleStream.Create(stmLargeImage);
        try
          Jpg.LoadFromStream(OleStream);
          jpg.SaveToFile(OutPutDir+StatStg.pwcsName);
        finally
          OleStream.Free;
        end;
      end;
    end; //end if StatStg.dwType=STGTY_STREAM then
    inc(i);
    AProgressBar.Position:=i;
  end;  //end while
  bmp.Free;
  jpg.Free;

end;

function TForm1.GetTotalImageFileNumInSSP(SSPFileName: string): integer;
var
  stgRoot:IStorage;
  stgTotalFiles:IStorage;

  stmTotalFiles:IStream;

begin
  //打开结构化存储文件,返回根存储stgRoot
  OleCheck(StgOpenStorage(StringToOleStr(SSPFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));



  //在根存储stgRoot下打开子存储stgSmallImage
  OleCheck(stgRoot.OpenStorage('TotalFiles',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0,stgTotalFiles));


  OleCheck(stgTotalFiles.OpenStream('TotalFilesValue',nil,STGM_READWRITE or
    STGM_SHARE_EXCLUSIVE,0,stmTotalFiles));

  stmTotalFiles.Read(@result,sizeof(integer),nil);


end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  Application.Terminate;
end;

end.

⌨️ 快捷键说明

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