stretchdibitsStretchDIBits是什么?麻烦告诉我
stretchdibits 时间:2021-01-10 阅读:(
)
请问 opencv有 灰度图转为2值图像的函数吗?
我想这个可以用函数cvthreshold()来实现,设置好一个阈值,就可以将灰度图转换为二值图,你觉得呢?
形式:void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );
src:原始数组 (单通道 , 8-bit of 32-bit 浮点数)。
dst:输出数组,必须与 src 的类型一致,或者为 8-bit。
threshold:阈值
max_value:使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。
threshold_type:阈值类型 threshold_type=CV_THRESH_BINARY:
如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,des(x,y)=0;
threshold_type=CV_THRESH_BINARY_INV:
如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.
threshold_typ为什么下载图片在手机里,都不能看不来大神们帮帮忙
格式也是一个,如果是诺基亚手机,需要放在相应的文件夹里才能看到,比如s60手机是放在imges文件夹GetBitmapBits和GetDIBits的区别
如果我们的CBitmap是得到设备兼容的位图:即:CreateCompatibleBitmap来创建的位图,则最好使用
GetDIBits得到位图数据; ::GetDIBits(memdc.m_hDC, btp, 0, bp.bmHeight, pData, pBpInfo, DIB_RGB_COLORS);
之后就可以根据位图数据显示该位图了
// 在客户区显示位图
CClientDC dc(this);
StretchDIBits(dc.m_hDC, 0, 0, bp.bmWidth, bp.bmHeight, 0, 0, bp.bmWidth, bp.bmHeight, pData, pBpInfo, DIB_RGB_COLORS, SRCCOPY);
也可以利用GetBitmapBits得到位图信息,但是得到的位图数据需要转化才与本来位图实际数据对应。
// 对于与设备兼容的位图,用GetBitmapBits得到的位图数据需要转换才可以正确显示位图
// 用GetBitmapBits,然后交换每行数据,最后再交行整个缓冲数据
// 位图本来存储格式如下:
// [g....k]
// [j....t]
// [......]
// [y....b]
// [x....a]
// 但是利用GetBitmapBits得到位图数据格式为 [x...a][y...b][....][j...t][g...k]
// 我们需要将其转化为[g...k][j...t][...][y...b][x...a]
// 步骤为:第一步将每行数据逆置,得到[a...x][b...y][...][t...j][k...g]
// 第二步:将第一步得到的格式,当做一个整体,进行逆置则得到[g...k][j...t][...][y...b][x...a]
dwRet = btp.GetBitmapBits(bp.bmWidthBytes * bp.bmHeight, pData); // 该方式获取位图信息,位图对象应该是LoadBitmap形式获取的
int nRow = bp.bmHeight; // 行数
// 先交换每行的位图数据
char *pS = NULL, *pE= NULL;
for (int j = 1; j <= nRow; j++)
{
pS = pData+(j-1)*bp.bmWidthBytes;
pE = pData+j*bp.bmWidthBytes -1 ;
SwapArray(pS, pE, bp.bmWidthBytes);
}
// 再交换整个数组数据
SwapArray(pData, pData+dwRet-1, dwRet);
// 在客户区显示位图
CClientDC dc(this);
StretchDIBits(dc.m_hDC, 0, 0, bp.bmWidth, bp.bmHeight, 0, 0, bp.bmWidth, bp.bmHeight, pData, pBpInfo, DIB_RGB_COLORS, SRCCOPY);
LocalFree(pData);
void SwapArray(char *pS, char *pE, int nCount)
{
int nMidIndex = nCount / 2;
char tmp;
for (int i = 0; i < nMidIndex; i ++)
{
tmp = *pS;
*pS = *pE;
*pE = tmp;
pS++;
pE--;
}
}如何用StretchDIBits显示位图
该函数将DIB中矩形区域内像素使用的颜色数据拷贝到指定的目标矩形中。
如果目标矩形比源矩形大小要大,那么函数对颜色数据的行和列进行拉伸,以与目标矩形匹配。
如果目标矩形大小要比源矩形小,那么该函数通过使用指定的光栅操作对行列进行压缩。
int StretchDIBits(HDC hdc, int XDest , int YDest , int nDestWidth, int nDestHeight, int XSrc, int Ysrc, int nSrcWidth, int nSrcHeight, CONST VOID *lpBits, CONST BITMAPINFO * lpBitsInfo, UINT iUsage, DWORD dwRop);
可以参考MSDN。
MFC 用 pDC-> SetPixel(i,j,RGB(255,0,0));设置像素颜色之后,怎么把设置后的值保存到原图像中?
如果你的DC已经把原图像选入,那么一切图形操作都是对这个图像进行的,不用另外保存。
StretchDIBits是什么?麻烦告诉我
如果目标矩形比源矩形大小要大,那么函数对颜色数据的行和列进行拉伸,以与目标矩形匹配。
如果目标矩形大小要比源矩形小,那么该函数通过使用指定的光栅操作对行列进行压缩。
函数原型:int StretchDIBits(HDC hdc, int XDest , int YDest , int nDestWidth, int nDestHeight, int XSrc, int Ysrc, int nSrcWidth, int nSrcHeight, CONST VOID *lpBits, CONST BITMAPINFO * lpBitsInfo, UINT iUsage, DWORD dwRop); 参数: hdc:指向目标设备环境的句柄。
XDest:指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。
YDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。
nDestWidth:指定目标矩形的宽度。
nDestHeight:指定目标矩形的高度。
XSrc:指定DIB中源矩形(左上角)的X轴坐标,坐标以像素点表示。
YSrc:指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示。
nSrcWidth:按像素点指定DIB中源矩形的宽度。
nSrcHeight:按像素点指定DIB中源矩形的高度。
lpBits:指向DIB位的指针,这些位的值按字节类型数组存储,有关更多的信息,参考下面的备注一节。
lpBitsInfo:指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息。
iUsage:表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了,那么该bmiColors是否包含了明确的RGB值或索引。
参数iUsage必须取下列值,这些值的含义如下:
DIB_PAL_COLOR:表示该数组包含对源设备环境的逻辑调色板进行索引的16位索引值。
DIB_RGB_COLORS:表示该颜色表包含原义的KGB值,若想了解更多的信息,请参考下面备注一节。
返回值:如果函数执行成功,那么返回值是拷贝的扫描线数目,如果函数执行失败,那么返回值是GDI_CRROR。
Windows NT:若想获取更多错误信息,请调用GetLastError函数。
Windows 98、Windows NT 5.0及以后版本:如果设备驱动程序不支持传送给StretchDIBits的JPEG文件格式的图像,则该函数将失败,并返回GEI_ERROR。
备注:自底向上的DIB的起始点为左下角,自顶向下DIB的起始点为左上角。
如果nSrcWidth和nDestWidth参数的符号不同。
或是nSrcHeight和nDesHeight参数的符号不同。
那么函数StretchDIBits将创建位图的镜像。
如果NsrcWidth和NdestWidth符号不同,那么函数将沿着X轴创建位图镜像。
如果NsrcHeight和NdestHeight符号不同,那么函数将沿着Y轴创建位图镜像。
如果BITMAPINFOHEADER结构中的成员biCompression为BI_JPEG,那么参数lpBits指向的是一个包含JPEG图像的缓冲区。
BITMAPINFOHEADER结构中的biSizeImage成员指定了该缓冲区的大小。
参数iUsage必须设为DIB_RGB_COLORS。
dwRop必须设为SRCCOPY。
如果BITMAPV4HEADER结构中的成员bV 4Compression为BI_JPEG,那么参数lpBits指向的是一个包含JPEG图像的缓冲区。
BITMPV4HEADER结构中的bV4SizeImage成员指定了该缓冲区的大小。
参数iUsage必须设为DIB_RGB_COLORS。
参数dwRop必须设为SRCCOPY。
如果BITMAPV5HEADER结构中的成员bV 5Compression为BI_JPEG,那么参数lpBits指向的是一个包含JPEG图像的缓冲区。
BITMPV5HEADER结构中的bV5SizeImage成员指定了该缓冲区的大小。
参数iUsage必须设为DIB_RGB_COLORS。
dwRop必须设为SRCCOPY。
为确保打印时可以有正确的图元文件假脱机操作。
应用程序应在调用StretchDIBits函数之前调用CHECKJPEGFORMAT转义符,以确认打印机识别JPEG图像。
ICM:执行颜色管理。
如果指定的BITMAPINFO结构中的bmiHeader不包含BITMAPV4HEADER或BITMAPV5HEADER,那么当前设备环境的颜色配置(profile)被用作源颜色配置(profile)。
如果没有颜色档案,那么就使用RGB。
如果指定的BITMAPINFO结构中的成员bmiHeader包含了BITMAPV4HEADER或BITMAPV5HEADER,那么将把位图标头中指定的颜色配置(profile)用作源颜色配置。
妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...
RAKsmart发布了新年钜惠活动,即日起到2月28日,商家每天推出限量服务器秒杀,美国服务器每月30美元起,新上了韩国服务器、GPU服务器、香港/日本/美国常规+站群服务器、1-10Gbps不限流量大带宽服务器等大量库存;VPS主机全场提供7折优惠码,同时针对部分特惠套餐无码直购每月仅1.99美元,支持使用PayPal或者支付宝等方式付款,有中英文网页及客服支持。爆款秒杀10台/天可选精品网/大...
Moack怎么样?Moack(蘑菇主机)是一家成立于2016年的商家,据说是国人和韩国合资开办的主机商家,目前主要销售独立服务器,机房位于韩国MOACK机房,网络接入了kt/lg/kinx三条线路,目前到中国大陆的速度非常好,国内Ping值平均在45MS左右,而且商家的套餐比较便宜,针对国人有很多活动。不过目前如果购买机器如需现场处理,由于COVID-19越来越严重,MOACK办公楼里的人也被感染...
stretchdibits为你推荐
马云将从软银董事会辞职亚洲首富马云今年有多太岁数软银巨亏阿里巴巴上市怎样影响中国国内免备案服务器国内的服务器是都要备案是吗?有没有不需要备案的?电脑杀毒软件哪个好电脑杀毒用哪个好?苹果手机助手哪个好苹果手机助手哪个好,苹果手机助手推荐?手机管家哪个好手机管家哪个好尼康和佳能单反哪个好入门的单反相机 佳能和尼康哪个好?空间登录页面怎样用网页登录到自己的QQ空间?qq空间登录不上qq空间登不进去 怎么办360云盘网页版360云盘电脑版与网页版有什么区别?如果资料全存在360云盘电脑版里面,那网页版会是空的还是自动同步?假如电脑坏了,或重装了,那电脑版里面的资料如何才能找回不?
已备案域名注册 greengeeks 美国主机排名 187邮箱 winscp 秒解服务器 特价空间 圣诞促销 徐正曦 泉州移动 服务器干什么用的 网通服务器托管 metalink 中国电信宽带测速器 闪讯官网 环聊 登陆qq空间 深圳主机托管 开心online apachetomcat 更多