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

📄 unitformview.pas

📁 图象处理的一些相关内容 不是很难的,实现简单,希望对大家有帮助
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  begin
    ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
      SSPImageFileList.GetNextFileName,Image1);

  end;

end;

procedure TFormView.ShowPreImage;
var
  ImageFileName:string;

begin
  if not FormBrowse.IsReadStructureStorageFileMode then
  begin
    ImageFileName:=ImageFileList.GetPreFileName;

    if IsJpgFile(ImageFileName) then
    begin
      try
        JpgToBmp(ImageFileName,ViewJpg,ViewBmp);
        image1.Picture.Bitmap:=ViewBmp;
      except
        MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
        +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);

        if ImageFileList.GetIndex=0 then
          ImageFileList.SetIndex(ImageFileList.GetFileCount-1)
        else
          ImageFileList.SetIndex(ImageFileList.GetIndex-1);

        exit;
      end;
    end
    else
      try
        image1.Picture.LoadFromFile(ImageFileName);
      except
        MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
        +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
        ImageFileList.SetIndex(ImageFileList.GetIndex+1);

        if ImageFileList.GetIndex=0 then
          ImageFileList.SetIndex(ImageFileList.GetFileCount-1)
        else
          ImageFileList.SetIndex(ImageFileList.GetIndex-1);

        exit;
      end;
  end
  else
  begin
    ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
      SSPImageFileList.GetPreFileName,Image1);


  end;

end;



procedure TFormView.ToolButtonPreImageClick(Sender: TObject);
begin
  ShowPreImage;
  ShowImageFit(true,1);

end;

procedure TFormView.ToolButtonNextImageClick(Sender: TObject);
begin
  ShowNextImage;
  ShowImageFit(true,1);

end;

procedure TFormView.ToolButtonZoomInClick(Sender: TObject);
begin
  MenuZoomINClick(nil);
end;

procedure TFormView.ToolButtonZoomOutClick(Sender: TObject);
begin
  MenuZoomOutClick(nil);
end;

procedure TFormView.ToolButtonZoomOriginClick(Sender: TObject);
begin
  ZoomI:=9;
  ShowImageFit(true,1);
end;

procedure TFormView.ShowHint;
var
  FileDateTime:TDateTime;
  strFileDateTime:string;
  s:string;
//  w,h:integer;


begin
  if not FormBrowse.IsReadStructureStorageFileMode then
  begin

    StatusBar1.Panels[0].Text:=inttostr(ImageFileList.GetIndex+1)+'/'+inttostr(ImageFileList.GetFileCount);

    FileDateTime:=FileDateToDateTime(fileage(ImageFileList.GetCurFullFileName));
    DateTimeToString(strFileDateTime,'yyyy-mm-dd hh:nn:ss',FileDateTime);
    StatusBar1.Panels[1].Text:=strFileDateTime;

    StatusBar1.Panels[2].Width:=canvas.TextWidth(ImageFileList.GetCurFileName)+20;
    StatusBar1.Panels[2].Text:=ImageFileList.GetCurFileName;

    s:=inttostr(image1.Picture.Bitmap.Width)+'x'+inttostr(image1.Picture.Bitmap.Height);
    StatusBar1.Panels[3].Width:=canvas.TextWidth(s)+20;
    StatusBar1.Panels[3].Text:=s;

    StatusBar1.Panels[4].Width:=50;
    StatusBar1.Panels[4].Text:=inttostr(trunc(zoom[zoomI]*100))+'%';
  end
  else
  begin
    StatusBar1.Panels[0].Text:=inttostr(SSPImageFileList.GetIndex+1)+'/'+inttostr(SSPImageFileList.GetFileCount);

    StatusBar1.Panels[1].Width:=canvas.TextWidth(SSPImageFileList.GetCurFileName)+20;
    StatusBar1.Panels[1].Text:=SSPImageFileList.GetCurFileName;

                //注意:用image1.Picture.Width而非image1.Picture.Bitmap.Width
    s:=inttostr(image1.Picture.Width)+'x'+inttostr(image1.Picture.Height);
    StatusBar1.Panels[2].Width:=canvas.TextWidth(s)+20;
    StatusBar1.Panels[2].Text:=s;


    StatusBar1.Panels[3].Text:=inttostr(trunc(zoom[zoomI]*100))+'%';

    StatusBar1.Panels[4].Width:=0;
  end;



  //
end;

procedure TFormView.MenuFullScreenClick(Sender: TObject);
begin


  self.BorderStyle:=bsNone;
  self.Menu:=nil;
  ToolBar1.Visible:=false;
  StatusBar1.Visible:=false;

  ScrollBox1.Align:=alNone;
  ScrollBox1.Top:=-2;
  ScrollBox1.Left:=-2;
//  ScrollBox1.HorzScrollBar.Visible:=false;
 // ScrollBox1.VertScrollBar.Visible:=false;

  ScrollBox1.Height:=screen.Height+4;
  ScrollBox1.Width:=screen.Width+4;

  ShowImageFit(true,1);

  IsFullScreenMode:=true;
end;

procedure TFormView.ToolButton7Click(Sender: TObject);
begin
  MenuFullScreenClick(nil);
end;

procedure TFormView.ShowImageFit(ImageHeight, ImageWidth: integer);
begin
  panel1.Visible:=false;

  Panel1.Top:=0;
  Panel1.Left:=0;
  Panel1.Height:=ImageHeight;
  Panel1.Width:=ImageWidth;

  Image1.AutoSize:=false;
  Image1.Stretch:=true;

  Image1.Height:=ImageHeight;
  image1.Width:=ImageWidth;

  Image1.Top:=0;
  Image1.Left:=0;


  if (Panel1.Height<=ScrollBox1.Height) and (Panel1.Width<=ScrollBox1.Width) then
  begin
    Panel1.Top:=(ScrollBox1.Height-Panel1.Height) div 2;
    Panel1.Left:=(ScrollBox1.Width-Panel1.Width) div 2;

  end
  else
  begin
    if Panel1.Height>ScrollBox1.Height then
      Panel1.Top:=0
    else
      Panel1.Top:=(ScrollBox1.Height-Panel1.Height) div 2;

    if Panel1.Width>ScrollBox1.Width then
      Panel1.Left:=0
    else
      Panel1.Left:=(ScrollBox1.Width-Panel1.Width) div 2;

  end;
  panel1.Visible:=true;
  ShowHint;

//
end;

procedure TFormView.Slide;
var
  ImageFileName:string;
  I:Integer;
  X0,Y0:integer;
  MidX,MidY:integer;
  RatioX,RatioY:real;
  Bitmap:TBitmap;
  Bitmap2:TBitmap;
  RndNum:integer;

begin
  if FormBrowse.IsReadStructureStorageFileMode then
    exit;

  Bitmap:=TBitmap.Create;
  bitmap.PixelFormat:=pf24bit;
  ImageFileName:=ImageFileList.GetCurFullFileName;

  if IsJpgFile(ImageFileName) then
  begin
    JpgToBmp(ImageFileName,ViewJpg,Bitmap);
  end
  else
    Bitmap.LoadFromFile(ImageFileName);

  Randomize;
  RndNum:=random(4);

  RatioX:=Bitmap.Width/Step;
  RatioY:=Bitmap.Height/Step;

  case RndNum of
  0:  //从中心到四周
    begin
      X0:=Bitmap.Width div 2;
      Y0:=Bitmap.Height div 2;
      for I:=0 to Step do
      begin
        MidX:=Round(RatioX*I*0.5);
        MidY:=Round(RatioY*I*0.5);
        BitBlt(image1.Canvas.Handle,X0-MidX,Y0-MidY,Round(RatioX*I),Round(RatioY*I),Bitmap.Canvas.Handle,X0-MidX,Y0-MidY,BLACKNESS	);
        image1.Repaint;
      end;
    end;
  1:   //从左上到右下
    begin
      for I:=0 to Step do
      begin
        BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Round(RatioY*I*1),Bitmap.Canvas.Handle,0,0,BLACKNESS);
        image1.Repaint;
      end;
    end;
  2:   //从左到右
    begin
      X0:=0;
      Y0:=0;

      for I:=0 to Step do
      begin
        MidX:=Round(RatioX*I);
        MidY:=Round(RatioY*I);
        BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Height,Bitmap.Canvas.Handle,0,0,BLACKNESS);
        image1.Repaint;
      end;
    end;
  3:  //从中间到两侧
    begin
      X0:=Bitmap.Width div 2;
      Y0:=0;
      for I:=0 to Step do
      begin
        MidX:=Round(RatioX*I*0.5);
        MidY:=Round(RatioY*I);
        BitBlt(image1.Canvas.Handle,X0-MidX,0,Round(RatioX*I*0.5),Bitmap.Height,Bitmap.Canvas.Handle,X0-MidX,0,BLACKNESS);
        BitBlt(image1.Canvas.Handle,Bitmap.Width div 2,0,Round(RatioX*I*0.5),Bitmap.Height,Bitmap.Canvas.Handle,Bitmap.Width div 2,0,BLACKNESS);
        image1.Repaint;
      end;
    end;


  end; //end case

  Bitmap.Free;

  ImageFileName:=ImageFileList.GetNextFileName;
  //image1.Picture.LoadFromFile(ImageFileName);

  Bitmap2:=TBitmap.Create;
  bitmap2.PixelFormat:=pf24bit;

  if IsJpgFile(ImageFileName) then
  begin
    JpgToBmp(ImageFileName,ViewJpg,bitmap2);
    //image1.Picture.Bitmap:=ViewBmp;
  end
  else
    bitmap2.LoadFromFile(ImageFileName);

  ShowImageFit(Bitmap2.Height,Bitmap2.Width);

  image1.Visible:=false;
  image1.Picture:=nil;
  image1.Canvas.Brush.Color :=clblack;
  image1.Canvas.FillRect(image1.Canvas.ClipRect);
  image1.Visible:=true;


  RatioX:=Bitmap2.Width/Step;
  RatioY:=Bitmap2.Height/Step;

  Randomize;
  RndNum:=random(4);
  case RndNum of
  0:  //从中心到四周
    begin
      X0:=Bitmap2.Width div 2;
      Y0:=Bitmap2.Height div 2;
      for I:=0 to Step do
      begin
        MidX:=Round(RatioX*I*0.5);
        MidY:=Round(RatioY*I*0.5);
        BitBlt(image1.Canvas.Handle,X0-MidX,Y0-MidY,Round(RatioX*I),Round(RatioY*I),Bitmap2.Canvas.Handle,X0-MidX,Y0-MidY,SRCCOPY);
        image1.Repaint;
      end;
    end;
  1:   //从左上到右下
    begin
      for I:=0 to Step do
      begin
        BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Round(RatioY*I*1),Bitmap2.Canvas.Handle,0,0,SRCCOPY);
        image1.Repaint;
      end;
    end;
  2:   //从左到右
    begin
      X0:=0;
      Y0:=0;
      for I:=0 to Step do
      begin
        MidX:=Round(RatioX*I);
        MidY:=Round(RatioY*I);
        BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Height,Bitmap2.Canvas.Handle,0,0,SRCCOPY);
        image1.Repaint;
      end;
    end;
  3:  //从中间到两侧
    begin
      X0:=Bitmap2.Width div 2;
      Y0:=0;
      for I:=0 to Step do
      begin
        MidX:=Round(RatioX*I*0.5);
        MidY:=Round(RatioY*I);
        BitBlt(image1.Canvas.Handle,X0-MidX,0,Round(RatioX*I*0.5),Bitmap2.Height,Bitmap2.Canvas.Handle,X0-MidX,0,SRCCOPY);
        BitBlt(image1.Canvas.Handle,Bitmap2.Width div 2,0,Round(RatioX*I*0.5),Bitmap2.Height,Bitmap2.Canvas.Handle,Bitmap2.Width div 2,0,SRCCOPY);
        image1.Repaint;
      end;
    end;
  end; //end case

  bitmap2.free;

end;

procedure TFormView.ShowFirstImage;
var
  ImageFileName:string;

begin
  if (not FormBrowse.IsReadStructureStorageFileMode) then
  begin
    ImageFileList.SetIndex(0);
    ImageFileName:=ImageFileList.GetCurFullFileName;

    if IsJpgFile(ImageFileName) then
    begin
      try
        JpgToBmp(ImageFileName,ViewJpg,ViewBmp);
        image1.Picture.Bitmap:=ViewBmp;
      except
        MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
        +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);

        if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
          ImageFileList.SetIndex(0)
        else
          ImageFileList.SetIndex(ImageFileList.GetIndex+1);
        exit;
      end;
    end
    else
      try
        image1.Picture.LoadFromFile(ImageFileName);
      except
        MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
        +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);

        if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
          ImageFileList.SetIndex(0)
        else
          ImageFileList.SetIndex(ImageFileList.GetIndex+1);

        exit;
      end;

  end
  else
  begin
    SSPImageFileList.SetIndex(0);
    ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
       SSPImageFileList.GetCurFileName,Image1);

  end;



end;

procedure TFormView.ShowLastImage;
var
  ImageFileName:string;

begin

  if (not FormBrowse.IsReadStructureStorageFileMode) then
  begin
    ImageFileList.SetIndex(ImageFileList.GetFileCount-1);
    ImageFileName:=ImageFileList.GetCurFullFileName;

    if IsJpgFile(ImageFileName) then
    begin
      try
        JpgToBmp(ImageFileName,ViewJpg,ViewBmp);
        image1.Picture.Bitmap:=ViewBmp;
      except
        MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
        +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);

        if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
          ImageFileList.SetIndex(0)
        else
          ImageFileList.SetIndex(ImageFileList.GetIndex+1);
        exit;
      end;
    end
    else
      try
        image1.Picture.LoadFromFile(ImageFileName);
      except
        MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
        +'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);

        if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
          ImageFileList.SetIndex(0)
        else
          ImageFileList.SetIndex(ImageFileList.GetIndex+1);

        exit;
      end;
  end
  else
  begin
    SSPImageFileList.SetIndex(SSPImageFileList.GetFileCount-1);
    ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
       SSPImageFileList.GetCurFileName,Image1);




  end;
end;


procedure TFormView.MenuFirstPageClick(Sender: TObject);
begin
  ShowFirstImage;
  ShowImageFit(true,1);

end;

procedure TFormView.MenuLastPageClick(Sender: TObject);
begin
  ShowlastImage;
  ShowImageFit(true,1);

end;

procedure TFormView.ScrollBox1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if button=mbRight then
  begin
    if timer1.Enabled then
      PopMenuSlideState.Caption:='停止'
    else
      PopMenuSlideState.Caption:='播放';

    if IsFullScreenMode then
      PopMenuScreenState.Caption:='返回观察模式'
    else
      PopMenuScreenState.Caption:='全屏' ;

    if FormBrowse.IsReadStructureStorageFileMode then
      PopMenuSlide.Enabled:=false;


    //Inherit;







  end;
//

end;

procedure TFormView.PopMenuSlideStateClick(Sender: TObject);
begin
  timer1.Enabled:=not timer1.Enabled;
end;

procedure TFormView.PopMenuScreenStateClick(Sender: TObject);
var
  key:word;

begin
  if (not IsFullScreenMode) then
    MenuFullScreenClick(nil)
  else
  begin
    key:= VK_ESCAPE;
    FormKeyDown(self,Key, []);
  end;

end;

procedure TFormView.MenuToolClick(Sender: TObject);
begin
  if timer1.Enabled then
    MenuSlideState.Caption:='停止'
  else
    MenuSlideState.Caption:='播放';
  if FormBrowse.IsReadStructureStorageFileMode then
    MenuSlide.Enabled:=false
  else
    MenuSlide.Enabled:=true;


end;

procedure TFormView.HTML1Click(Sender: TObject);
begin
  FormBrowse.MenuCreateHTMLAlbumClick(nil); 
end;

procedure TFormView.N13Click(Sender: TObject);
begin
  FormBrowse.MenuImageEditorClick(nil);
//
end;

procedure TFormView.N1Click(Sender: TObject);
begin
  if FormBrowse.IsReadStructureStorageFileMode then
  begin
    HTML1.Enabled:=false;
    N13.Enabled:=false;
  end
  else
  begin
    HTML1.Enabled:=true;
    N13.Enabled:=true;
  end;
end;

end.

⌨️ 快捷键说明

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