文档章节

WinAPI: CombineRgn - 区域合成

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 396
阅读 17
收藏 0
点赞 0
评论 0
CombineRgn(
  p1: HRGN;     {合成后的区域}
  p2, p3: HRGN; {两个原始区域}
  p4: Integer   {合并选项; 见下表}
): Integer;     {有四种可能的返回值}

//合并选项:
RGN_AND  = 1;
RGN_OR   = 2;
RGN_XOR  = 3;
RGN_DIFF = 4;
RGN_COPY = 5; {复制第一个区域}

//返回值:
ERROR         = 0; {错误}
NULLREGION    = 1; {空区域}
SIMPLEREGION  = 2; {单矩形区域}
COMPLEXREGION = 3; {多矩形区域}

 
 
 
 
 

 

 

  
本例效果图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  Rgn1,Rgn2,Rgn: HRGN;

//初始化
procedure TForm1.FormCreate(Sender: TObject);
begin
  {建立两个原始区域}
  Rgn1 := CreateEllipticRgn(20, 20, 120, 160);
  Rgn2 := CreateEllipticRgn(70, 20, 170, 160);

  {Rgn 是用来接受运算结果的, 但函数 CombineRgn 要求它必须是已存在的区域, 这里虚拟一个}
  Rgn := CreateRectRgnIndirect(BoundsRect);

  RadioGroup1.Items.CommaText := '两个原始区域,RGN_AND,RGN_OR,RGN_XOR,RGN_DIFF,RGN_COPY';
  RadioGroup1.ItemIndex := 0;
end;

//见到窗体时先绘制一次
procedure TForm1.FormActivate(Sender: TObject);
begin
  RadioGroup1Click(nil);
end;

//主要代码
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  Repaint;
  if RadioGroup1.ItemIndex = 0 then
  begin
    Canvas.Brush.Color := clSilver;
    Canvas.Brush.Style := bsDiagCross;
    FillRgn(Canvas.Handle, Rgn1, Canvas.Brush.Handle);
    FillRgn(Canvas.Handle, Rgn2, Canvas.Brush.Handle);

    Canvas.Brush.Style := bsSolid;
    Canvas.Brush.Color := clRed;
    FrameRgn(Canvas.Handle, Rgn1, Canvas.Brush.Handle, 2, 2);
    FrameRgn(Canvas.Handle, Rgn2, Canvas.Brush.Handle, 2, 2);
  end else begin
    CombineRgn(Rgn, Rgn1, Rgn2, RadioGroup1.ItemIndex);

    Canvas.Brush.Color := clSilver;
    Canvas.Brush.Style := bsDiagCross;
    FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle);

    Canvas.Brush.Style := bsSolid;
    Canvas.Brush.Color := clRed;
    FrameRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle, 2, 2);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeleteObject(Rgn1);
  DeleteObject(Rgn2);
  DeleteObject(Rgn);
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 182
  ClientWidth = 300
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnActivate = FormActivate
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object RadioGroup1: TRadioGroup
    Left = 189
    Top = 8
    Width = 106
    Height = 166
    Caption = 'RadioGroup1'
    TabOrder = 0
    OnClick = RadioGroup1Click
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/05/26/1208004.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
桌面精灵制作解析

最近一直在做一个涉及到很多Windows Region区域处理的项目,在开展的过程中,另我想起了几年前看到的一篇讲制作桌面精灵的文章([url]http://www.vckbase.com/vckbase/vckbase12/vc/nonctrls...

余二五
2017/11/16
0
0
请问如何实现java图片合成时图像透明区域选取删除

@andy.zheng 你好,想跟你请教个问题:请问如何实现java图片合成时图像透明区域选取删除? 需求如下:我有A图和B图,需要合成。A图有一部分区域是透明区域,我希望B图像同A图像合成时,A为背...

limiyun
2012/12/05
858
3
使用canvas在前端实现图片合成

看着总结的不错,我也就拿来主义了,做个记录,侵权必删 图片合成最常见的需求有验证码图片,亦或者图片加水印等,这种实现一般都是后端实现的。 随着HTML5发展和现代浏览器的占比越来越高,...

xllily_11
02/26
0
0
ETH Zurich提出新型网络「ROAD-Net」,解决语义分割域适配问题

问题背景 本文研究的是无人驾驶场景中的语义分割问题。语义分割的样本标记成本很高,使用合成数据能帮助解决样本不足问题。但是合成的数据和真实的数据之间存在差异,这种差异会极大影响使用...

技术小能手
05/03
0
0
MFC开发QQ游戏客户端登录界面

开始: 按下“高级设置”后 图片均采用QQ游戏的BMP图。 图片界面是利用对图片的拼接并计算Rgn后进行CombineRgn ,最后SetWindowRgn实现。 上面的广告是一个HTML页面。 可以通过MFC中的HtmlVie...

长平狐
2012/11/19
245
0
LibGDX_5.2: 图片合成工具(Texturepacker 工具 与 TextureAtlas 类)

本文链接: http://blog.csdn.net/xietansheng/article/details/50187651 LibGDX 基础教程(总目录) 1. 概述 在游戏开发中通常需要读取许多图片加载为纹理,每创建一个图片纹理对象都要经过读...

xietansheng
2015/12/07
0
0
深度学习「一键P图」:为原画无缝添加新元素

  选自arXiv   作者:栾福军等   机器之心编译   参与:路、张倩      把照片中的一个元素「复制粘贴」到绘画作品上,很简单?Nonono… 要想成品不像拼贴画,二者风格一致甚至融...

机器之心
04/15
0
0
Android Canvas控件View控件绘制

2015年收尾制作了如下几种控件 其中2篇代码被小伙伴放到了CSDN上 http://blog.csdn.net/superloveboy/article/details/49612255 http://blog.csdn.net/superloveboy/article/details/4961287......

IamOkay
2016/01/07
730
1
信号量(随意指定线程执行顺序)

HANDLE WINAPI CreateSemaphore(Inopt LPSECURITYATTRIBUTES lpSemaphoreAttributesIn LONG lInitialCount,In LONG lMaximumCount,Inopt_ LPCTSTR lpName); 第一个参数:安全属性,如果为NUL......

qq_29067611
2017/12/13
0
0
MFC开发QQ游戏客户端登录界面

开始: 按下“高级设置”后 图片均采用QQ游戏的BMP图。 图片界面是利用对图片的拼接并计算Rgn后进行CombineRgn ,最后SetWindowRgn实现。 上面的广告是一个HTML页面。 可以通过MFC中的HtmlVie...

长平狐
2013/03/19
619
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20位活跃在Github上的国内技术大牛 leij 何小鹏 亚信

本文列举了20位在Github上非常活跃的国内大牛,看看其中是不是很多熟悉的面孔? 1. lifesinger(玉伯) Github主页: https://github.com/lifesinger 微博:@ 玉伯也叫射雕 玉伯(王保平),...

海博1600
11分钟前
0
0
高性能服务器本质论

一 服务器分类 从软件性能角度,高性能服务器分:cpu密集型服务器/IO密集型服务器 (1)CPU密集型:该类服务器没有对io的访问/没有同步点,性能瓶颈在于对cpu的充分利用。 典型的如转发服务器/...

码代码的小司机
12分钟前
0
0
Mybatis收集配置

一、Mybatis取Clob数据 1、Mapper.xml配置 <resultMap type="com.test.User" id="user"> <result column="id" property="id"/> <result column="json_data" property="jsonData" ......

星痕2018
37分钟前
0
0
centos7设置以多用户模式启动

1、旧版本linux系统修改inittab文件,在新版本执行vi /etc/inittab 会有以下提示 # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON......

haha360
今天
0
0
OSChina 周日乱弹 —— 局长:怕你不爱我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ andonny :分享周二珂的单曲《孤独她呀》 《孤独她呀》- 周二珂 手机党少年们想听歌,请使劲儿戳(这里) @孤星闵月 :没事干,看一遍红楼梦...

小小编辑
今天
192
9
Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
今天
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
11
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
17
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
254
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部