① 如何辨别兰花品种的优劣
我国人民传统喜爱的兰花是兰科兰属中的一些一地生兰,花比较小,色淡素,有幽香。这与欧美人士要求兰花花大、色艳完全不同。我国各地人民对兰花的喜好不尽相同,但对兰花香气的要求是一致的。兰花有清香,一枝在室,满目飘香,素有"香祖"、"国香"、"天下第一香"之称。就香气而论,以春兰最醇,蕙兰、剑兰次之,建兰、琴兰又次之,墨兰香气较差。在花色上以清雅淡素(素心)为主,白色花被的兰花称为素心兰,被视为珍品;如春兰中的绿云、文团素、云南大雪素等,春剑素等,建兰中之玉枕、凤尾素,墨兰中的白墨等是。对花形,在江浙江带讲究萼片、花瓣的形态和排列形式,以梅瓣、荷瓣、水仙瓣为良佳。有部分人对兰花的叶片,特感兴趣,认为"观叶胜看花"。尤其对弯曲下垂,婀娜多姿,微风一过,一摇三摆更为欣赏。最近对兰叶有白色或黄色线条的线艺兰,视为珍品。
欣赏兰花涉及到美学
② 关于期权和行权的问题
1、这是公司内部的期权,具体行权方式应该问你们人士或者薪酬委员会或者领导,从你提供的资料上来看,公司分给了你一共18000份的期权,这个权力让你可以以0.5USD的价格购买公司股份,从2018~2021年每年的4月1日都可进行4500份期权的行权(或这一日之前,这一点在图上看不出);
2、你的是买入期权,卖出期权只在二级资本市场上存在;
3、对的,要么行权,要么放弃,这个期权是给你一个机会能够以优惠的价格获得公司股份;
4、首先要行权,行权之后获得公司股份,然后可以转让公司股份,甚至可以等到公司上市之后变现,但这一切都取决于公司的经营情况;
5、行权之后期权就消失了,你获得了股份,但如果离职的话,股份的去留情况要看你和公司的合同;
6、行权的费用在第1点里已经说了,每份0.5USD;
7、期权的价值在于标的股份的价值,比如公司运营的不好了,每股股票价格只有0.4USD了,这时候就可以放弃行权,因为没有人会花0.5USD去买一股价格为0.4USD的股票,但只要你行权了,期权就消失,你手上就变成了股份,这股份值不值钱依然是看公司的运营情况;
8、公司不上市,期权未必没价值,因为股份的价值不一定要上市才会体现,上市只是增加了估值的公允性和流动性,但如果倒闭了,那这些股份就不值钱了,请注意我说的一直是股份,因为期权在行权或者放弃之后都是消失的
综上,请一定记住期权只是一种权力,你们公司给你提供的期权权利金是固定的,你也无法转让这些权力,所以你需要关心的只是你们公司的具体运营情况,然后判断自己是否需要行权
③ mycoreinfo 多久入账
如果是正式增值税一般纳税人,必须当月认证当月抵扣。
根据会计准则的对企业财务会计信息质量要求及时性原则的规定:企业对于已经发生的交易或者事项,应当及时进行会计确认、计量和报告,不得提前或延后。
发生了费用支出就应在发生的时间入账,如果发生了没及时记录,可以补记,但仍应作为发生当期的成本费用,如果跨年度应作为会计差错,调整以前年度的相关科目。
(3)mycoreinfo股票卖出扩展阅读:
注意事项:
1、发票是盖有税务监制章的,但不能说没有盖税务监制章的凭证都不合规。如盖有财政监制章的行政事业单位统一收据,没有盖税务监制章的汽车票、火车票及飞机票,医院使用的专用收据等。
2、如果去境外出差,形式发票也是可以作为报销凭证的。还有如在合同纠纷中诉讼至法院,法院的判决及裁决书也是可以作为入账凭证的。在自制原始凭证中,如借款单也是可以作为付款依据的。
3、审核发票的名称、发票的类型、填制日期和编号、经济业务内容、数量、计量单位、单价和金额、填制单位名称及经办人的签名并盖章等。
④ 中国兰花与洋兰的异同点
不管是洋兰还是国兰,它们均属于兰科的多年生草本植物,通常具有兰科植物的共有特征,例如假鳞茎、质厚坚韧的叶片和具有唇瓣的两侧对称花等。所不同的是,洋兰通常开有色彩艳丽的较大花朵,而且大部分为气生的附生兰;而国兰则开有幽香的小型花朵,花色以素雅或淡色为主,花朵的外形变化多端,什么牡丹瓣、蝶瓣、荷瓣、梅瓣、水仙瓣、菊瓣都会出现在同一个种之内,形成了不同类别的花艺品种。除了形形色色的花艺品种外,国兰还有不少叶片出现黄、白色线艺的叶艺品种。以观赏的角度来看,洋兰代表了一种西方文化的现代美,而国兰则体现了东方文化的古典美。故当今养兰人群也可大致分成喜欢艳丽的洋兰一族和喜欢幽雅芳香的国兰一族。
⑤ 请问这个怎么实现哦。
C#操作xml 自己看着改吧
引用命名空间:using System.Xml
1.检查所要操作的xml文件是否存在:
System.IO.File.Exists(文件路径及名称);
2.得到xml文件:
(1)在asp.net中可以这样得到:
XmlDocument xmlDoc = new XmlDocument();
//导入xml文档
xmlDoc.Load( Server.MapPath("xmlTesting.xml"));
//导入字符串
//xmlDoc.LoadXml("<bookStore> <book id="01" price="3.5元"> 读者</book></bookStore>");
注:Server.MapPath("xmlTesting.xml")此时的xmlTesting.xml文件必须是在当前的解决方案里;同样可以写成完整的物理路径xmlDoc.Load (@"E:"软件学习"测试"myNoteWeb"xmlTesting.xml")
(2)在windForm中 直接用物理路径得到所要操作的xml文件具体实现方法同上
3.创建xml文件:
XmlDocument xmlDoc = new XmlDocument(); //创建xml文档(实例化一个xml)
XmlNode root = xmlDoc.CreateElement("bookStore");//创建根节点
//创建第1个子结点:
XmlNode bookNode = xmlDoc.CreateElement("book");
bookNode.InnerText = "读者";
//为此节点添加属性
法1:
bookPublishNode.SetAttribute("id", "01")
root.AppendChild(bookNode);
法2:
XmlAttribute xmlattribute = tempXmlDoc.CreateAttribute("price");
xmlattribute.Value = "3.5元";
tempRoot .Attributes .Append (xmlattribute )
//创建第2个根节点的子结点:
XmlNode tempBookNode = xmlDoc.CreateElement("tempbook ");
tempBookNode.InnerText ="文摘";
root.AppendChild(tempBookNode);
xmlDoc.AppendChild(root); //将根节点添加到xml文档中
try
{
xmlDoc.save(“bookInfo.xml”);//xml将保存到当前解决方案的目录下
}
catch (Exception ex)
{
MessageBox.Show(ex.Message); //显示错误信息
}
得到的xml文档如下:
<?xml version="1.0" encoding="utf-8" ?>
<bookStore>
<book id ="01" price="3.5元">
读者
</book>
<tempbook id ="02">
文摘
</tempbook >
</bookStore>
4.读取,修改xml信息
tempTesting.xml文件的内容如下:
?<?xml version="1.0" encoding="utf-8"?>
<bookStore>
<book id="01" price="3.5元">
读者
</book>
<book id="02" price="5元">
<bookname>百家讲坛</bookname>
<bookpublish>文学出版社</bookpublish>
</book>
<tempbook id="0000">漫画tempbook>
</bookStore>
(1) 得到xml文件的xml信息
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load( Server.MapPath("xmlTesting.xml"));
XmlNode root=xmlDoc.DocumentElement;
(2) 得到节点
//得到id为2book节点下的所有节点
XmlNodeList xmlNodes = root.SelectNodes("//book[@id='02']//*");
XmlNode tempNode = xmlNodes[0];//得到第一个节点
//将tempbook强制转化为XmlElement
XmlElement xmlelement = (XmlElement)root.SelectSingleNode("tempbook");
(3) 修改节点内容
XmlNode tempBook = root.SelectSingleNode("tempbook");//修改节点内容
tempBook. InnerText="漫画";
(4)得到节点的属性值并修改:
//得到节点的属性
//法1
XmlAttributeCollection attrbute= tempBook.Attributes;
string bookID = attrbute[0].Value;
//法2:
string bookid = tempBook.Attributes[0].Value.ToString();
//修改节点属性的值
tempBook.Attributes[0].Value = "0000";
(5)添加一个根节点
XmlNode node = xmlDoc.CreateElement("testing");
node.InnerText = "testing";
root.AppendChild(node);
(6)保存修改后的文档
xmlDoc.Save(Server.MapPath("tempTesting.xml"));
******其他:
(一)显示xml信息
1以xml文档的样式显示:xmlDoc.outerxml;
2.显示各个节点
XmlNode root = xmlDoc.DocumentElement;//得到根节点:
if (root.ChildNodes.Count > 0)
{
XmlNode xmlnode = root.FirstChild;//得到子结点:
for (int i = 0; i < root.ChildNodes.Count; i++)
{
MessageBox.Show(xmlnode.FirstChild .InnerText);
xmlnode = xmlnode.NextSibling;或mlNode subNode2 = root.LastChild;
}
}
else
MessageBox.Show("没有内容!");
(二)将数据库的信息导入为xml
XmlDocument xmlDocItem = new XmlDocument();
DataSet ds = GetDataSet(strtsql);//调用方法从数据库中得到DataSet。
xmlDocItem.LoadXml(ds .GetXml ());//导入xml中;
*****************************以下是在网络上找到的关于C#操作xml文件的总结***
一:创建并保存xml文件
string FileName =Application.StartupPath+"""phone.xml";
XmlTextWriter objXmlTextWriter = new XmlTextWriter(FileName,Encoding.Default);
objXmlTextWriter.Formatting = Formatting.Indented;
objXmlTextWriter.Indentation = 6;
objXmlTextWriter.WriteStartDocument();
objXmlTextWriter.WriteStartElement("", "PhoneBook", "");
objXmlTextWriter.WriteStartElement("", "Name", "");
objXmlTextWriter.WriteString("加菲尔德");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteStartElement("", "Number", "");
objXmlTextWriter.WriteString("5555555");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteStartElement("", "City", "");
objXmlTextWriter.WriteString("纽约");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteStartElement("", "DateOfBirth", "");
objXmlTextWriter.WriteString("26/10/1978");
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteEndDocument();
objXmlTextWriter.Flush();
objXmlTextWriter.Close();
这段代码在win2003ser+vs2005环境下测试通过,出来的效果很好,也比较容易理解,我一般就是用这段代码创建XML文件。
二、读取、修改XML文件的某个节点的值
string path = "phone.xml";
XmlDocument doc = new XmlDocument();
doc.Load(path);
//读所有节点表
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
//读取节点值
XmlNode node = doc.SelectSingleNode("/PhoneBook/Name", xnm); //node.InnerText 就是读取出来的值
//修改节点值
node.InnerText="要修改的内容";
//保存修改后的内容
doc.Save(path);
⑥ 请问兰花叶子上出现白点是什么病
长虫了,介壳虫病。
介壳虫是半翅目,蚧总科昆虫的总称。根据蚧虫网(Scalenet,2014)的统计,现已被描述的介壳虫种类超过7500种[1]。大多数种类虫体上备有蜡质分泌物,形如介壳,介壳虫也因此而得名。介壳虫是花卉和果树上最常见的害虫,常群集于枝、叶、果上,吸取植物汁液为生,严重时会造成枝条凋萎或全株死亡。此外,介壳虫的分泌物还能诱发煤污病,危害极大。常见的有吹绵蚧、樟蚌圆盾蚧、糠片蚧、朝鲜球坚蚧、桑白蚧、康氏粉蚧、扶桑绵粉蚧等。
防治方法:
(一)植物检疫
介壳虫常固着寄生,虫体微小,主要靠寄主枝条、接穗、果品甚至树干携带而远距离传播。因此,对苗木、接穗和果品的采购、调运过程和保护区都应实施检疫,以防传播蔓延。
(二)农业防治
加强果园管理,及时中耕松土、施肥和灌水,满足果树对水肥的需要,可增强树势,提高果树抗虫能力。结合整形修剪,把带虫的枝条集中烧毁,可大大减少虫口数量。
(三)生物防治
保护利用自然天敌,实施生物防治是控制介壳虫种群数量的有效途径。各地都有一些保护利用自然天敌,控制介壳虫危害的成功经验,应注意总结推广,如瓢虫是介壳虫的主要捕食性天敌,通过提供庇护场所或人工助迁、释放澳洲瓢虫、大红瓢虫和黑缘红瓢虫等,可有效防治吹绵蚧、草履蚧的危害。介壳虫的寄生蜂、寄生菌种类也十分丰富,如日光蜂是防治梨圆蚧的有效天敌,已成为国际上引种利用的对象,应进一步加强研究。此外,在采用其它防治措施,特别是进行化学防治时,尽可能避免杀伤天敌。
(四)物理和机械防治
抓住介壳虫生命活动中的2个薄弱环节,采用物理、机械的方法,可以起到事半功倍的防治效果。首先,介壳虫营固着生活,很少活动,在新传入区常常只在局部植株或枝条上发生,及时采取拔株、剪枝、刮树皮或刷除等措施,便可收到显着的效果,如梨圆蚧传入新疆霍城、伊宁数年后,仅在局部枣园发生,由于当地枣树苗低矮,栽培间距大,蚧虫只集中在少数植株上发生,采取拔除烧毁措施,收到了彻底的防治效果。其次,介壳虫短距离扩散蔓延主要靠初孵若虫爬行,此时采用枝干涂粘虫胶或其它阻隔方法,可阻止扩散,消灭绝大部分若虫。粘胶用10份松香、8份蓖麻油和0.5份石蜡配制而成,将它们按比例混在一起,加热溶化后即可使用,粘性一般可维持15天左右。对于草履蚧亦可采用树根附近挖坑的方法,把其消灭在树下。
(五)化学防治
1、休眠期防治 在果树休眠期,喷洒3~5.5°Bé石硫合剂,3%~5%柴油ES或5%~6%煤焦油ES,对介壳虫有较好的防治效果,并可兼治蚜虫和叶螨。
2、生长期防治 应抓住2个关键防治时期,初龄若虫爬动期或雌成虫产卵前是第1个防治适期, 卵孵化盛期是第2个防治适期,选用低毒的选择性杀虫剂进行防治。如“邯科140”1000倍液、毒死蜱600倍液、催杀800倍液等。
⑦ 求用vc++编程实现显示灰度直方图的详细步骤,越详细越好
步骤和程序:
打开VC程序——文件——新建——工程中的MFC AppWizard(exe),在工程下面的框中输入工程名(假定工程名为111),点确定——选多重文档,点下一个——后面都点下一个直到完成确定,基本框架就完成了,下面就加代码。
这时VC界面上左边框的下面有三个按钮:ClassView、ResourceView和FileView,ClassView里面是工程111的类:CAdoutDlg、CChildFrame、CMy111App、CMy111Doc、CMy111View和Globals;点ResourceView里面是资源类:Accelerator、Dialog、Icon、Menu、String Table、Toolbar和Version;点开FileView里面是文件类:Source File、Header Files、Resource Files和ReadMe.txt。
点界面的“工程”按钮——添加工程——新建——选C++ Source File,在文件下面的框里输入文件名(如DIBAPI),点“结束”,这样在FileView中的Source Files里面就多了一个DIBAPI.cpp文件,所有的代码都加在该文件中。再点界面的“工程”按钮——添加工程——新建——选C/C++ Header File,在文件下面的框里输入文件名(和前面的文件名必须一致),点“结束”,这样在FileView中的Header Files里面就多了一个DIBAPI.h文件,该文件是DIBAPI.cpp的头文件。
点开DIBAPI.h文件,里面是空白的,把如下代码考入文件中:
//DIBAPI.h
#ifndef _INC_DIBAPI
#define _INC_DIBAPI
DECLARE_HANDLE(HDIB);
#define PALVERSION 0x300
#define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi))==sizeof(BITMAPINFOHEADER))
#define RECTWIDTH(lpRect) ((lpRect)->right-(lpRect)->left)
#define RECTHEIGHT(lpRect) ((lpRect)->bottom-(lpRect)->top)
#define WIDTHBYTES(bits) (((bits)+31)/32*4)
#define DIB_HEADER_MARKER ((WORD)('M'<<8)|'B')
BOOL WINAPI PaintDIB(HDC,LPRECT,HDIB,LPRECT,CPalette* pPal);
BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* cPal);
LPSTR WINAPI FindDIBBits(LPSTR lpbi);
DWORD WINAPI DIBWidth(LPSTR lpDIB);
DWORD WINAPI DIBHeight(LPSTR lpDIB);
WORD WINAPI PaletteSize(LPSTR lpbi);
WORD WINAPI DIBNumColors(LPSTR lpbi);
HGLOBAL WINAPI CopyHandle(HGLOBAL h);
BOOL WINAPI SaveDIB(HDIB hDib,CFile& file);
HDIB WINAPI ReadDIBFile(CFile& file);
//在此处输入自己的函数声明
#endif//!_INC_DIBAPI
上面这些函数是实现图像的读取、存储等图像处理的基本功能的,你将自己需要的函数也输入到“//在此处输入自己的函数声明”的下面。
点开DIBAPI.cpp文件,里面是空白的,将如下代码加入其中:
//DIBAPI.cpp
#include "stdafx.h"
#include "DIBAPI.h"
WORD WINAPI DIBNumColors(LPSTR lpbi)
{
WORD wBitCount;
if(IS_WIN30_DIB(lpbi))
{
DWORD dwClrUsed;
dwClrUsed=((LPBITMAPINFOHEADER)lpbi)->biClrUsed;
if(dwClrUsed)
return (WORD)dwClrUsed;
}
if(IS_WIN30_DIB(lpbi))
wBitCount=((LPBITMAPINFOHEADER)lpbi)->biBitCount;
else
wBitCount=((LPBITMAPCOREHEADER)lpbi)->bcBitCount;
switch(wBitCount)
{
case 1:
return 2;
case 4:
return 16;
case 8:
return 256;
default:
return 0;
}
}
WORD WINAPI PaletteSize(LPSTR lpbi)
{
if(IS_WIN30_DIB(lpbi))
return (WORD)(DIBNumColors(lpbi)*sizeof(RGBQUAD));
else
return (WORD)(DIBNumColors(lpbi)*sizeof(RGBTRIPLE));
}
LPSTR WINAPI FindDIBBits(LPSTR lpbi)
{
return (lpbi+*(LPDWORD)lpbi+::PaletteSize(lpbi));
}
DWORD WINAPI DIBWidth(LPSTR lpDIB)
{
LPBITMAPINFOHEADER lpbmi;
LPBITMAPCOREHEADER lpbmc;
lpbmi=(LPBITMAPINFOHEADER)lpDIB;
lpbmc=(LPBITMAPCOREHEADER)lpDIB;
if(IS_WIN30_DIB(lpDIB))
return lpbmi->biWidth;
else
return (DWORD)lpbmc->bcWidth;
}
DWORD WINAPI DIBHeight(LPSTR lpDIB)
{
LPBITMAPINFOHEADER lpbmi;
LPBITMAPCOREHEADER lpbmc;
lpbmi=(LPBITMAPINFOHEADER)lpDIB;
lpbmc=(LPBITMAPCOREHEADER)lpDIB;
if(IS_WIN30_DIB(lpDIB))
return lpbmi->biHeight;
else
return (DWORD)lpbmc->bcHeight;
}
BOOL WINAPI PaintDIB(HDC hDC,LPRECT lpDCRect,HDIB hDIB,LPRECT lpDIBRect,CPalette* pPal)
{
LPSTR lpDIBHdr;
LPSTR lpDIBBits;
BOOL bSuccess=FALSE;
HPALETTE hPal=NULL;
HPALETTE hOldPal=NULL;
if(hDIB==NULL)
return FALSE;
lpDIBHdr=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
lpDIBBits=FindDIBBits(lpDIBHdr);
if(pPal!=NULL)
{
hPal=(HPALETTE)pPal->m_hObject;
hOldPal=::SelectPalette(hDC,hPal,TRUE);
}
::SetStretchBltMode(hDC,COLORONCOLOR);
if((RECTWIDTH(lpDCRect)==RECTWIDTH(lpDIBRect))&&(RECTHEIGHT(lpDCRect)==RECTHEIGHT(lpDIBRect)))
{
bSuccess=::SetDIBitsToDevice(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,\
(int)DIBHeight(lpDIBHdr)-lpDIBRect->top-RECTHEIGHT(lpDIBRect),0,(WORD)DIBHeight(lpDIBHdr),\
lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS);
}
else
{
bSuccess=::StretchDIBits(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,\
lpDIBRect->top,RECTWIDTH(lpDIBRect),RECTHEIGHT(lpDIBRect),\
lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);
}
::GlobalUnlock((HGLOBAL)hDIB);
if(hOldPal)
::SelectPalette(hDC,hOldPal,TRUE);
GlobalUnlock(hDIB);
return bSuccess;
}
BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* pPal)
{
LPLOGPALETTE lpPal;
HANDLE hLogPal;
HPALETTE hPal=NULL;
LPSTR lpbi;
LPBITMAPINFO lpbmi;
LPBITMAPCOREINFO lpbmc;
BOOL bWinStyleDIB;
int i;
WORD wNumColors;
BOOL bResult=FALSE;
if(hDIB==NULL)
return FALSE;
lpbi=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
lpbmi=(LPBITMAPINFO)lpbi;
lpbmc=(LPBITMAPCOREINFO)lpbi;
wNumColors=DIBNumColors(lpbi);
bWinStyleDIB=IS_WIN30_DIB(lpbi);
if(wNumColors!=0)
{
hLogPal=::GlobalAlloc(GHND,sizeof(LOGPALETTE)+sizeof(PALETTEENTRY)*wNumColors);
if(hLogPal==0)
{
::GlobalUnlock((HGLOBAL)hDIB);
return FALSE;
}
lpPal=(LPLOGPALETTE)::GlobalLock(hLogPal);
lpPal->palVersion=PALVERSION;
lpPal->palNumEntries=(WORD)wNumColors;
bWinStyleDIB=IS_WIN30_DIB(lpbi);
for(i=0;i<(int)wNumColors;i++)
{
if(bWinStyleDIB)
{
lpPal->palPalEntry[i].peRed=lpbmi->bmiColors[i].rgbRed;
lpPal->palPalEntry[i].peGreen=lpbmi->bmiColors[i].rgbGreen;
lpPal->palPalEntry[i].peBlue=lpbmi->bmiColors[i].rgbBlue;
lpPal->palPalEntry[i].peFlags=0;
}
else
{
lpPal->palPalEntry[i].peRed=lpbmc->bmciColors[i].rgbtRed;
lpPal->palPalEntry[i].peGreen=lpbmc->bmciColors[i].rgbtGreen;
lpPal->palPalEntry[i].peBlue=lpbmc->bmciColors[i].rgbtBlue;
lpPal->palPalEntry[i].peFlags=0;
}
}
bResult=pPal->CreatePalette(lpPal);
::GlobalUnlock((HGLOBAL)hLogPal);
::GlobalFree((HGLOBAL)hLogPal);
}
::GlobalUnlock((HGLOBAL)hDIB);
return bResult;
}
HGLOBAL WINAPI CopyHandle(HGLOBAL h)
{
if(h==NULL)
return NULL;
DWORD dwLen=::GlobalSize((HGLOBAL)h);
HGLOBAL hCopy=::GlobalAlloc(GHND,dwLen);
if(hCopy!=NULL)
{
void* lpCopy=::GlobalLock((HGLOBAL)hCopy);
void* lp=::GlobalLock((HGLOBAL)h);
memcpy(lpCopy,lp,dwLen);
::GlobalUnlock(hCopy);
::GlobalUnlock(h);
}
return hCopy;
}
BOOL WINAPI SaveDIB(HDIB hDib,CFile& file)
{
BITMAPFILEHEADER bmfHdr;
LPBITMAPINFOHEADER lpBI;
DWORD dwDIBSize;
if(!hDib)
return FALSE;
lpBI=(LPBITMAPINFOHEADER)::GlobalLock((HGLOBAL)hDib);
if(lpBI==NULL)
return FALSE;
if(!IS_WIN30_DIB(lpBI))
{
::GlobalUnlock((HGLOBAL)hDib);
return FALSE;
}
bmfHdr.bfType=DIB_HEADER_MARKER;
dwDIBSize=*(LPDWORD)lpBI+::PaletteSize((LPSTR)lpBI);
if((lpBI->biCompression==BI_RLE8)||(lpBI->biCompression==BI_RLE4))
dwDIBSize+=lpBI->biSizeImage;
else
{
DWORD dwBmBitsSize;
dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount))*lpBI->biHeight;
dwDIBSize+=dwBmBitsSize;
lpBI->biSizeImage=dwBmBitsSize;
}
bmfHdr.bfSize=dwDIBSize+sizeof(BITMAPFILEHEADER);
bmfHdr.bfReserved1=0;
bmfHdr.bfReserved2=0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+lpBI->biSize+::PaletteSize((LPSTR)lpBI);
TRY
{
file.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER));
file.WriteHuge(lpBI,dwDIBSize);
}
CATCH(CFileException,e)
{
::GlobalUnlock((HGLOBAL)hDib);
THROW_LAST();
}
END_CATCH
::GlobalUnlock((HGLOBAL)hDib);
return TRUE;
}
HDIB WINAPI ReadDIBFile(CFile& file)
{
BITMAPFILEHEADER bmfHeader;
DWORD dwBitsSize;
HDIB hDIB;
LPSTR pDIB;
dwBitsSize=file.GetLength();
if(file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader))!=sizeof(bmfHeader))
return NULL;
if(bmfHeader.bfType!=DIB_HEADER_MARKER)
return NULL;
hDIB=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,dwBitsSize);
if(hDIB==0)
return NULL;
pDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
if(file.ReadHuge(pDIB,dwBitsSize-sizeof(BITMAPFILEHEADER))!=dwBitsSize-sizeof(BITMAPFILEHEADER))
{
::GlobalUnlock((HGLOBAL)hDIB);
::GlobalFree((HGLOBAL)hDIB);
return NULL;
}
::GlobalUnlock((HGLOBAL)hDIB);
return hDIB;
}
//在此处输入自己的函数定义
上面是DIBAPI.h头文件中声明的函数的定义,你将自己的函数定义加到“//在此处输入自己的函数定义”后面。
下面加相应的消息映射函数,点Ctrl+W键,会出现MFC ClassWizard对话框,点Message Maps,在Class name下面的框中选择CMy111Doc,在Messages里面选中OnOpenDocument,然后点击Add Function按钮就加入了相应的消息映射函数,同样的方法以此加入OnSaveDocument、DeleteContents、CanCloseFrame相应的消息函数,点“确定”即可。
点开111Doc.cpp文件,里面有相应的消息映射函数定义位置,在函数CMy111Doc::CMy111Doc()里输入以下代码:
m_refColorBKG=0x00808080;
m_hDIB=NULL;
m_palDIB=NULL;
m_sizeDoc=CSize(1,1);
在函数CMy111Doc::~CMy111Doc()里输入以下代码:
if(m_hDIB!=NULL)
::GlobalFree((HGLOBAL)m_hDIB);
if(m_palDIB!=NULL)
delete m_palDIB;
在函数BOOL CMy111Doc::OnOpenDocument(LPCTSTR lpszPathName)里/ TODO: Add your specialized creation code here下面添加如下代码:
CFile file;
CFileException fe;
if(!file.Open(lpszPathName,CFile::modeRead|CFile::shareDenyWrite,&fe))
{
ReportSaveLoadException(lpszPathName,&fe,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);
return FALSE;
}
DeleteContents();
BeginWaitCursor();
TRY
{
m_hDIB=::ReadDIBFile(file);
}
CATCH(CFileException,eLoad)
{
file.Abort();
EndWaitCursor();
ReportSaveLoadException(lpszPathName,eLoad,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);
m_hDIB=NULL;
return FALSE;
}
END_CATCH
InitDIBData();
EndWaitCursor();
if(m_hDIB==NULL)
{
CString strMsg;
strMsg="读取图像时出错!可能是不支持该类型的图像文件!";
MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);
return FALSE;
}
SetPathName(lpszPathName);
SetModifiedFlag(FALSE);
在函数BOOL CMy111Doc::OnSaveDocument(LPCTSTR lpszPathName)里// TODO: Add your specialized code here and/or call the base class后面添加如下代码:
CFile file;
CFileException fe;
if(!file.Open(lpszPathName,CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive,&fe))
{
ReportSaveLoadException(lpszPathName,&fe,TRUE,AFX_IDP_INVALID_FILENAME);
return FALSE;
}
BOOL bSuccess=FALSE;
TRY
{
BeginWaitCursor();
bSuccess=::SaveDIB(m_hDIB,file);
file.Close();
}
CATCH(CException,eSave)
{
file.Abort();
EndWaitCursor();
ReportSaveLoadException(lpszPathName,eSave,TRUE,AFX_IDP_FAILED_TO_SAVE_DOC);
return FALSE;
}
END_CATCH
EndWaitCursor();
SetModifiedFlag(FALSE);
if(!bSuccess)
{
CString strMsg;
strMsg="无法保存BMP图像";
MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);
}
点开ClassView,右键点击CMy111Doc类,点Add Member Variable出现添加成员变量对话框,在Variable Type下的框中输入变量类型名HDIB,在Variable Name中输入变量名m_hDIB,在Access中选中Public就在CMy111Doc中加入了公共成员变量m_hDIB;同样加入int类型的m_nColorIndex、COLORREF类型的m_refColorBKG公共成员变量,再添加保护成员变量(在Access中选中Protected)CSize类的m_sizeDoc、CPalette*类的m_palDIB变量。右键点击CMy111Doc类,点Add Member Function出现添加成员函数对话框,在Function Type下的框中输入函数类型名void,在Function Declaration中输入函数名InitDIBData(),在Access中选中Public就在CMy111Doc中加入了公共成员函数InitDIBData();同样方法加入void类型的公共成员函数ReplaceHDIB(HDIB hDIB)。在111Doc.cpp中加入函数的代码,InitDIBData()里加如下代码:
if(m_palDIB!=NULL)
{
delete m_palDIB;
m_palDIB=NULL;
}
if(m_hDIB==NULL)
return;
LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)m_hDIB);
if(::DIBWidth(lpDIB)>INT_MAX||::DIBHeight(lpDIB)>INT_MAX)
{
::GlobalUnlock((HGLOBAL)m_hDIB);
::GlobalFree((HGLOBAL)m_hDIB);
m_hDIB=NULL;
CString strMsg;
strMsg="BMP图像太大!";
MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);
return;
}
m_sizeDoc=CSize((int)::DIBWidth(lpDIB),(int)::DIBHeight(lpDIB));
::GlobalUnlock((HGLOBAL)m_hDIB);
m_palDIB=new CPalette;
if(m_palDIB==NULL)
{
::GlobalFree((HGLOBAL)m_hDIB);
m_hDIB=NULL;
return;
}
if(::CreateDIBPalette(m_hDIB,m_palDIB)==NULL)
{
delete m_palDIB;
m_palDIB=NULL;
return;
}
在函数ReplaceHDIB(HDIB hDIB)中加入如下代码:
if(m_hDIB!=NULL)
::GlobalFree((HGLOBAL)m_hDIB);
m_hDIB=hDIB;
在CMy111doc.h的
// Attributes
public:
下面加入如下代码:
HDIB GetHDIB() const
{
return m_hDIB;
}
CPalette* GetDocPalette() const
{
return m_palDIB;
}
CSize GetDocSize() const
{
return m_sizeDoc;
}
注意要在111Doc.h前加上#include "DIBAPI.h"语句(在class CMy111Doc:public CDocument语句前)
下面为CMy111View中的函数 void CMy111View::OnDraw(CDC* pDC)中添加如下代码:
BeginWaitCursor();
CMy111* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HDIB hDIB=pDoc->GetHDIB();
if(hDIB!=NULL)
{
LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
int cxDIB=(int)::DIBWidth(lpDIB);
int cyDIB=(int)::DIBHeight(lpDIB);
::GlobalUnlock((HGLOBAL)hDIB);
CRect rcDIB;
rcDIB.top=rcDIB.left=0;
rcDIB.right=cxDIB;
rcDIB.bottom=cyDIB;
CRect rcDest;
if(pDC->IsPrinting())
{
int cxPage=pDC->GetDeviceCaps(HORZRES);
int cyPage=pDC->GetDeviceCaps(VERTRES);
int cxInch=pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch=pDC->GetDeviceCaps(LOGPIXELSY);
rcDest.top=rcDest.left=0;
rcDest.bottom=(int)(((double)cyDIB*cxPage*cyInch)/((double)cxDIB*cxInch));
rcDest.right=cxPage;
int temp=cyPage-(rcDest.bottom-rcDest.top);
rcDest.bottom+=temp/2;
rcDest.top+=temp/2;
}
else
{
rcDest=rcDIB;
}
::PaintDIB(pDC->m_hDC,&rcDest,pDoc->GetHDIB(),&rcDIB,pDoc->GetDocPalette());
}
EndWaitCursor();
以上是关于图像打开、显示、保存的有关步骤和代码。
在111.cpp文件的InitInstance()函数的ParseCommandLine(cmdInfo);语句下输入语句
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
则启动时不自动打开一个空文档。
显示图像直方图步骤:
1、 点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为ID_HIST,对话框名称改为“直方图”
2、 在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为ID_HIST。这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID设为IDC_HISTSHOW;
3、 快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中。
4、 在Hist.h文件“public:”下面输入如下变量定义:
LONG m_lCount[256];
char* m_lpDIBBits;
LONG m_lWidth;
LONG m_lHeight;
int m_iIsDraging;
CDlgIntensity(CWnd* pParent = NULL);
5、 打开Hist.cpp程序,在CHist::OnInitDialog()函数中“// TODO: Add extra initialization here”前将如下代码拷贝进去:
unsigned char* lpSrc;
LONG i;
LONG j;
6、 在“// TODO: Add extra initialization here”后将如下代码拷贝进去:
CWnd* pWnd=GetDlgItem(IDC_HISTSHOW);
CRect rect;
GetClientRect(rect);
ClientToScreen(&rect);
for(i=0;i<256;i++)
{
m_lCount[i]=0;
}
LONG lLineBytes;
lLineBytes=WIDTHBYTES(m_lWidth*8);
for(i=0;i<m_lHeight;i++)
{
for(j=0;j<m_lWidth;j++)
{
lpSrc=(unsigned char*)m_lpDIBBits+lLineBytes*i+j;
m_lCount[*(lpSrc)]++;
}
}
m_iIsDraging=0;
7、在CHist::OnPaint()函数“CPaintDC dc(this);”前将如下代码拷如其中:
CString str;
LONG i;
LONG lMaxCount=0;
LONG m_iLowGray=0;
LONG m_iUpGray=255;
在CHist::OnPaint()函数“// TODO: Add your message handler code here”后将如下代码拷如其中:
CWnd* pWnd=GetDlgItem(IDC_ HISTSHOW);
CDC* pDC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(0,0,330,300);
CPen* pPenRed=new CPen;
pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen* pPenBlue=new CPen;
pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0,255));
CPen* pPenGreen=new CPen;
pPenGreen->CreatePen(PS_SOLID,1,RGB(0,255,0));
CGdiObject* pOldPen=pDC->SelectObject(pPenRed);
pDC->MoveTo(10,10);
pDC->LineTo(10,280);
pDC->LineTo(320,280);
str.Format("0");
pDC->TextOut(10,283,str);
str.Format("50");
pDC->TextOut(60,283,str);
str.Format("100");
pDC->TextOut(110,283,str);
str.Format("150");
pDC->TextOut(160,283,str);
str.Format("200");
pDC->TextOut(210,283,str);
str.Format("255");
pDC->TextOut(265,283,str);
for(i=0;i<256;i+=5)
{
if((i&1)==0)
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,284);
}
else
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,282);
}
}
pDC->MoveTo(315,275);
pDC->LineTo(320,280);
pDC->LineTo(315,285);
pDC->MoveTo(10,10);
pDC->LineTo(5,15);
pDC->MoveTo(10,10);
pDC->LineTo(15,15);
for(i=m_iLowGray;i<=m_iUpGray;i++)
{
if(m_lCount[i]>lMaxCount)
{
lMaxCount=m_lCount[i];
}
}
pDC->MoveTo(10,25);
pDC->LineTo(14,25);
str.Format("%d",lMaxCount);
pDC->TextOut(11,26,str);
pDC->SelectObject(pPenGreen);
pDC->MoveTo(m_iLowGray+10,25);
pDC->LineTo(m_iLowGray+10,280);
pDC->MoveTo(m_iUpGray+10,25);
pDC->LineTo(m_iUpGray+10,280);
pDC->SelectObject(pPenBlue);
if(lMaxCount>0)
{
for(i=m_iLowGray;i<=m_iUpGray;i++)
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,281-(int)(m_lCount[i]*256/lMaxCount));
}
}
pDC->SelectObject(pOldPen);
delete pPenRed;
delete pPenBlue;
delete pPenGreen;
8、点开ResourceView中的Menu,出现IDR_MAINFRAME和 IDR_MY111TYPE,双击IDR_MY111TYPE就出现了程序界面,有文件、编辑、查看、窗口、帮助按钮。点“查看”下面的虚线框右键——点“属性”,输入标题(直方图),和ID(大写英文,如ID_VIEW_HIST),这样就将按钮和程序通过ID联系起来了,点击该按钮,就会执行相应的程序。下面为该按钮添加函数:点Ctrl+W ,出现MFC ClassWizard对话框,选Class name为CMy111View,在Object IDs对应的选项中选中设置的ID(如为ID_VIEW_HIST),在Messages选项中选中COMMAND,然后点击“Add Function”按钮,选默认设置,就为ID_VIEW_HIST添加了相应的函数OnViewHist()。该函数在111View.cpp文件中定义,在函数void CMy111View:: OnViewHist()添加如下代码:
// TODO: Add your command handler code here
CMy111Doc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持查看256色位图灰度直方图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
CHist dlgPara;
dlgPara.m_lpDIBBits=lpDIBBits;
dlgPara.m_lWidth=::DIBWidth(lpDIB);
dlgPara.m_lHeight=::DIBHeight(lpDIB);
// dlgPara.m_iLowGray=0;
// dlgPara.m_iUpGray=255;
if(dlgPara.DoModal()!=IDOK)
{
return;
}
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
⑧ 中国 洋兰栽培异同
什么是洋兰?有人根据其生态习性,认为洋兰多为气生兰,所以把洋兰称为气生兰,把气生兰也称为洋兰。这种说法不够科学,因为在国产的兰花中也有气生兰,如台兰,我们就不能把台兰说成是洋兰。有人根据其原产地多在热带,所以把洋兰也叫热带兰,说热带兰就是洋兰,这也不够全面,因一部分洋兰也产于亚热带甚至温带。有人根据其花香,认为开花不香的就是洋兰,香的就是国兰。这种说法也不准确。洋兰中如某些卡特兰,其花也有香味;相反,国产的某些兰花些花也没有香味的,如某些九华兰。有人又根据其产地,认为原产地为中国的叫国兰,原产地在外国的叫洋兰。这种说法也有缺陷。某些原产地为中国的兰化被欧美引进,并用欧美的育种技术进行人工杂交育出新种,这些新种虽原产地在中国,但也不能叫国兰。因为它是用“洋技术”育出的,是杂交兰,所以也称为洋兰。如此看来,要给洋兰下个比较严密的定义颇不容易。笔者认为,首先洋兰是个习惯叫法,也是约定俗成的叫法,不是一个植物学上的科学概念,另外,洋兰是中国人对某些兰的特有的称谓,不是一个国际通用的植物学概念。但洋兰中竟还是有其特定的外延的。笔者从实际出发,试给它这么一个界限:原产地除了中国、日本之外,主要产自中南美洲、澳大利亚一带的外国产的观赏兰,和其亲本之一产自外国、用外国首创的人工育种技术培育出来的观赏兰新品种,通称为洋兰。即洋产的或用洋技术育出的适合洋人欣赏习惯的园艺兰花品种叫洋兰。
正如美国的历史比中国短得多一样,洋兰的栽培历史也比国兰的短得多。洋兰至今只有200多年的栽培史,其发展过程可以分为4个历史阶段。
(l)最初栽培期。一说最初从热带引进野生兰进行栽培的是荷兰;一说最初导入英国的是1731年,当时一位经营纺织业的英国商人从阿巴哈马群岛函购了野生兰的干标本,当年冬天把球茎种于庭院,第二年夏天即开花,被认为是栽培洋兰的第一人。另一种说法是,1818年英国人斯威逊到巴西采集苔藓,用蔓生植物的藤捆扎,运回英国后,被当时着名的园艺学家威廉.卡特丽看到,卡特丽将这些蔓生植物予以栽培,到1824年开花,植物学家林德雷把它命名为卡特兰,这就是现今风靡世界的卡特兰(嘉德丽亚兰)的始祖。
(2)商品销售期。1759年,英国成立了皇家植物花园,大量输入各种热带植物,其中也包括兰花。英国海军的库克船长,则以澳洲为中心,大量搜集热带兰,输入英国。到1813年,被栽培的野生兰已达150种。1824年,新种卡特兰一开花,在欧洲掀起了前所未有的养兰热。英国各公司也随之开始经营兰花业,纷纷派人四出搜集兰花新品种,并定期在英国各地拍卖。当时每株平均价约17英镑,其中也有高达700英镑的。虽然那只是一种投资性的销售,但自些兰花的市场已出现,其贸易日益繁荣。
(3)杂交新品种兰花出现期。1856年10月,世界第一次成功地通过人工交配育出的洋兰新品种开了花、这件事大大地打开了兰花爱好者的眼界,人们对于养兰的兴趣与日俱增。
(4) 风靡世界,大批量贸易期。第二次世界大战后,由于经济的繁荣,人们生活水平的提高,交通的发达,国际交流的频繁,栽培洋兰的时尚已从英国、日本的上层人士发展到平民百姓,并传到美国、澳大利亚、东南业诸国。洋兰的现代化生产,杂交兰种的层出不穷,更促进了兰业的繁荣、到现在,兰花产业已成为世界经济和人民生活的一个组成部分。世界几个主要的洋兰生产国,其洋兰产业也已成为这些国家经济发展最迅速的产业之一。荷兰1986年洋兰产值达6亿美元,日本洋兰年产值在1亿美元以上,美国国内洋兰年消费量在1亿美元以上。泰国目前有兰花种植园四五千个,年经济收入达6000万美元以上,创汇也在2000万美元以上。其他如法国、意大利、新加坡、韩国、我同的台湾省等均已成为洋兰的生产国(或地区),全世界每年洋生的外贸总贸易额已达十三四亿美元(不含各国国内销售) 。可以预测,在未来的日子里,洋兰以其独具的欣赏魅力和日见繁多的品种,其产业将会有更大的发展。
⑨ 如何识别兰花优劣
兰花的鉴赏标准
大千世界,兰花众多,栽培历史悠久,品种丰富。对于兰花的品赏标准,受地域或个人的偏好而不同。一般艺兰者对于所养兰花,只要花开时有香味,便认为是好兰,谓之取其香。有些地区的艺兰者,唯爱传统名品,认为只是有名的老种,才称得上是好兰,谓之取其名。有些地区的艺兰者,不管瓣型、叶型如何,认为只有素心者是好兰,谓之取其素。有些地区的艺兰者,只要花的色彩奇特而丰富,就称得上好兰,谓之取其艳。有些地区的艺兰者则不太重视花的瓣型,偏重于矮种或叶的长度、宽度、弯垂对比度,尤其重视叶带有颜色,谓之取其奇。有些地区的艺兰者,则偏重于原生种、下山新品的发掘,谓之取其新。有的兰花叶片晶莹透亮,成为人们追求的兰花贵族???水晶兰。
那么究竟什么样的兰花,才称得上是好兰呢?以我之见,评价一个兰花品种的优劣主要按色、型、奇、香、素、韵六字顺序排列,若具其中一二,皆为可取。
“色”就是指花的色彩鲜艳而俏丽。对一株兰花来说,花色与叶色的对比度越大,观赏价值也就越高,故“色”是第一位的品赏标准。
“型”一般是指花的传统欣赏标准,梅型瓣、梅瓣、荷型瓣、荷瓣、荷形水仙瓣、梅型水仙瓣、柳叶瓣,有关这类瓣型的理论的文章已是屡见不鲜了。
除此之外,如寒兰的线型瓣,春兰与四季兰中的蝶化瓣和蝶型瓣,也应当列入“型”的品赏标准之中,故“型”是一个重要的品赏标准。
“奇”一是指花瓣的数量、形状、色彩非同寻常,奇特如唇瓣,都属名贵。二是指叶色奇,如叶片带有黄、白镶边,或整个叶面黄白绿相间等,也都属名品。叶面带黄、白镶边的品种,海外兰界称为“艺兰”。据有些专家讲,兰花绿叶出现黄、白镶边的机会仅有万分之一。因而凡叶片带有其它颜色的都属名贵品种。另还有螺旋叶、绉叶、蛤蟆叶、矮种圆头叶等,故“奇”也是当今品赏国兰的又一个重要标准。
“香”是指国兰独具的幽香。兰花香气是任何植物的香气都不能相比的,也是有史以来人类爱兰、养兰的主要原因之一。日本人把兰之香比作龙之睛,说兰无香就好似龙无睛。我国兰花冰清玉洁,幽香袭人。可见兰之香气是必不可少的品赏标准。
因素兰甚多,“素”则排列至第五位。这是指兰花的唇瓣具有单一颜色(以白、绿、黄舌为多,全红舌根极少)。素兰之所以名贵,原因有三:其一,能表现兰的气节,就是人们常说的兰花不以无人而不芳,不以艳丽取宠。而彩唇瓣的兰,就显不出兰的纯洁。其二,物以稀为贵,因为素心兰要比彩心兰少得多,在各类兰花中,建兰素心最多,其次是春兰,再次是蕙兰,更次是墨兰,寒兰中素心最少。一般来说素心建兰的价值低于其它素心。其三,素唇兰也具有奇的特征。
“韵”就是指兰花具有整体的姿态韵律美。也是美学理论中所说的协调即是美。如果前述五项品赏标准,能集中体现,当然属至高品位,价值连城,但由于自然界的变化无穷,故常言“金无足赤”,要想面面俱到是不可能的。若能在五项标准中具备一二,或二三,也就让欣赏者知足了。故也可以说,“韵”是一项综合性品评鉴赏标准,尽管它会受到个人偏好、文化层次、艺术修养等诸多因素制约,但美毕竟是客观存在的。
总而言之,对于国兰品种的品评与鉴赏,用得着中国一句老话,就是“物以稀为贵”。民间很早就有“千梅万世选,一荷无处求”之说。故一般荷瓣的兰花又比梅瓣、水仙瓣等瓣型兰花更受推崇。
⑩ 雪放在植物的土里,为什么不会冻坏植物
不会,因为这些雪可以帮助植物的根抵挡外界的冷空气,而这些雪又因为天冷而不会化掉,是为植物保暖的。