我有一幅图片,我只想把图片的中间部分裁剪下来显示在image中,并保存到数据库。请问如何实现?谢谢

解决方案 »

  1.   

    保存图片的方式很多
    可以通过流来实现
    不过你说的图片剪切
    没弄过,不过你可以试着通过用Canvas.CopyRect函数来完成
      

  2.   

    我也正想实现一个这样的程序呢,kanven(zeng)有结果了没,我的QQ:34195512联系
      

  3.   

    procedure TCanvas.CopyRect(const Dest: TRect; Canvas: TCanvas;
      const Source: TRect);下面是一段delphi的例子var
      Bitmap: TBitmap;
      MyRect, MyOther: TRect;
    begin  MyRect := Rect(10,10,100,100);  MyOther := Rect(10,111,100, 201);
      Bitmap := TBitmap.Create;
      Bitmap.LoadFromFile('c:\windows\tartan.bmp');
      Form1.Canvas.BrushCopy(MyRect, Bitmap, MyRect, clBlack);
      Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
      Bitmap.Free;
    end;
      

  4.   

    楼主再看看吧,那样应该是可以的下面的这一句也是局部复制
    Form1.Canvas.BrushCopy(MyRect, Bitmap, MyRect, clBlack);
      

  5.   

    用Scanline函数,和CopyMemory函数,如
    procedure TForm1.CutBMPImage;
    var
      ColorHi,y : integer;
      P1,P2 : PByteArray;
    begin
      ColorHi:=3;
      cutimg.Width:=XLength;//截取的宽度
      cutimg.Height:=YLength;;//截取的高度
      try
        for y := 0 to cutimg.height -1 do
        begin
          P1 := cutimg.ScanLine[y];
          P2 := bmp.ScanLine[yStart+y+ScrollBox1.VertScrollBar.Position];//Ystart为起点纵坐标
          CopyMemory(P1, Pointer(LongInt(P2)+(xStart+ScrollBox1.HorzScrollBar.Position)*ColorHi),cutimg.width*ColorHi);//Xstart为起点横坐标
        end;
      except  end;  try
          Image2.Picture.Assign(CutImg);
      except  end;
    end;
      

  6.   

    to duanhai你的那段代码放到哪里写?我在button的onclick事件里写不行。
      

  7.   

    windows位图函数:BitBlt 将一幅位图从一个设备场景复制到另一个 
    CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序 
    CopyImage 复制位图、图标或指针,同时在复制过程中进行一些转换工作 
    CreateBitmap 按照规定的格式创建一幅与设备有关位图 
    CreateBitmapIndirect 创建一幅与设备有关位图 
    CreateCompatibleBitmap 创建一幅与设备有关位图,它与指定的设备场景兼容 
    CreateCursor 创建一个鼠标指针 
    CreateDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图 
    CreateDIBSection 创建一个DIBSection 
    CreateIcon 创建一个图标 
    CreateIconIndirect 创建一个图标 
    DestroyCursor 清除指定的鼠标指针,并释放它占用的所有系统资源 
    DestroyIcon 清除图标 
    DrawIcon 在指定的位置画一个图标 
    DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能 
    ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联并提取之 
    ExtractIcon 判断一个可执行文件或DLL中是否有图标存在,并将其提取出来 
    GetBitmapBits 将来自位图的二进制位复制到一个缓冲区 
    GetBitmapDimensionEx 取得一幅位图的宽度和高度 
    GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息 
    GetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里 
    GetIconInfo 取得与图标有关的信息 
    GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式 
    LoadBitmap 从指定的模块或应用程序实例中载入一幅位图 
    LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针 
    LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针 
    LoadIcon 从指定的模块或应用程序实例中载入一个图标 
    LoadImage 载入一个位图、图标或指针 
    MaskBlt 执行复杂的图象传输,同时进行掩模(MASK)处理 
    PatBlt 在当前选定的刷子的基础上,用一个图案填充指定的设备场景 
    PlgBlt 复制一幅位图,同时将其转换成一个平行四边形。利用它可对位图进行旋转处理 
    SetBitmapBits 将来自缓冲区的二进制位复制到一幅位图 
    SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位 
    SetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息 
    SetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里 
    SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备 
    SetStretchBltMode 指定StretchBlt 和 StretchDIBits函数的伸缩模式 
    StretchBlt 将一幅位图从一个设备场景复制到另一个 
    StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景 
      

  8.   

    你需要用到TGraphic类的SaveToFile也就是说你截剪的图形应放在一个TGraphic类中