现有一 Rect 区域为32x32的,有一 Bitmap 为64x64的,要将此bitmap画在此Rect 中,用TCanvas.Draw(Rect.Left,Rect.Top,BitMap) 的话会将

时间:2022-10-23 20:36:33
现有一 Rect 区域为32x32的,有一 Bitmap 为64x64的,要将此bitmap画在此Rect 中,用TCanvas.Draw(Rect.Left,Rect.Top,BitMap) 的话会将整个bitmap画上,会超出Rect(32x32)的区域。现在要求从bitmap左上起裁剪出Rect的大小并画在Rect上,而不会影响Rect以外的区域,该如何做?

5 个解决方案

#1


有个伸缩属性的阿,叫sc什么的!

#2


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;

就是这个意思了,改一下就能用

#3


我试试先,thx

#4


函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。

    函数原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);

    参数:

    hdcDest:指向目标设备环境的句柄。

    nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。

    nYOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。

    nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。

    nHeightDest:指定目标矩形的高度,按逻辑单位表示高茺。

    hdcSrc:指向源设备环境的句柄。

    nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。

    nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。

    nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。

    nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。

    dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。参考BitBlt可了解常用的光栅操作码列表。

    返回值:如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。Windows NT:若想获得更多的错误信息,请调用GetLastError函数。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h:库文件:gdi32.lib。

#5


下面列出了一些常见的光栅操作代码:

    BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。

    DSTINVERT:表示使目标矩形区域颜色取反。

    MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。

    MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。

    NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。

    NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。

    PATCOPY:将特定的模式拷贝到目标位图上。

    PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。

    PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。

    SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。

    SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。

    SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。

    SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。

    SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。

    WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。

#1


有个伸缩属性的阿,叫sc什么的!

#2


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;

就是这个意思了,改一下就能用

#3


我试试先,thx

#4


函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。

    函数原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);

    参数:

    hdcDest:指向目标设备环境的句柄。

    nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。

    nYOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。

    nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。

    nHeightDest:指定目标矩形的高度,按逻辑单位表示高茺。

    hdcSrc:指向源设备环境的句柄。

    nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。

    nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。

    nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。

    nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。

    dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。参考BitBlt可了解常用的光栅操作码列表。

    返回值:如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。Windows NT:若想获得更多的错误信息,请调用GetLastError函数。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h:库文件:gdi32.lib。

#5


下面列出了一些常见的光栅操作代码:

    BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。

    DSTINVERT:表示使目标矩形区域颜色取反。

    MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。

    MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。

    NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。

    NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。

    PATCOPY:将特定的模式拷贝到目标位图上。

    PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。

    PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。

    SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。

    SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。

    SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。

    SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。

    SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。

    WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。