【笨嘴拙舌WINDOWS】BMP图片浏览器
要将文件显示成图片这其中需要经过
1.将磁盘文件内容读取到内存;
2.将文件对应内存里包含的像素为以及像素信息转化为显示驱动器能理解的格式;
3.将转化过后的内存送到显卡的缓存区
4.显示器读取缓存现实于屏幕
在GDI中,WINDOWS不允许用户操作硬件,所以提供了用于显示位图文件到屏幕的API:
SetDIBitsToDevice 直接将DIB显示到屏幕上
(
hdc,
xDst,
yDst, (xDst,yDst)指定图片左上角的在屏幕上的坐标
cxSrc, 要显示DIB图片的宽度
cySrc, 要显示DIB图片的宽度
xSrc,
ySrc, (xSrc,ySrc)是DIB图片左下角的坐标
yScan, 指定DIB图片从哪一行扫描行开始
cYScans, 指定一次扫描多少行
pBits,
pInfo,
fClrUse
)
StrechDIBits 将DIB通过缩放来显示到屏幕上
SetDIBitsToDevice 和StrechDIBits 在函数调用期间,每个像素(可能有几百万个)必须从设备无关的格式想设备相关的格式转换,而这种转换通常是非常繁琐的。因此这两个函数的执行效率并不是非常高,WINDOWS为我们提供了一些DIB与DDB的转换函数。
hBitmap = CreateDIBitmap(hdc,pInfoHdr,0,PbITS,PiNFO,0)
或者
hBitmap = CreateDIBitmap(hdc,pInfoHdr,0,null,null,0)
SetDibits(hdc,hBitmap,0,bitmap.height,pBits,Pinfo,0)
《《------------反向---------------------》》
通过GetDibits(hdc,hBitmap,yScan,CYScans,pBits(out),Pinfo(out),0)将DDB转换为DIB,将位图保存为磁盘文件,屏幕截图就需要使用此函数
【笨嘴拙舌WINDOWS】BMP图片浏览器的更多相关文章
- Windows 保存BMP图片
在Windows下保存BMP图片还是挺方便的,直接上代码,拷贝就能用 void savebmp(uchar * pdata, char * bmp_file, int width, int heigh ...
- windows server 2008 R2安装图片浏览器/照片查看器方法
有用户的电脑安装了windows server 2008 R2,浏览大量图片时很不方便,因为系统中没有照片查看器或图片浏览器.其实,win2008 R2是有照片查看器的,只是默认情况下没有开启.参考以 ...
- BMP图片格式模型
BMP BMP(全称Bitmap)是Window操作系统中的标准图像文件格式 可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广. 它采用位映射存储格式,除了图像深度可选以外,不 ...
- 用WPF窗体打造个性化界面的图片浏览器
原文:用WPF窗体打造个性化界面的图片浏览器 本文使用WPF窗体(XAML及C#)与Win Form控件(FolderBrowserDialog)结合的方式, 演示制作了一个简易漂亮的WPF图片浏览器 ...
- 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片
本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...
- bmp图片的有关操作
读取bmp图片 并生成新的bmp图片 #include "stdafx.h"#include <windows.h>#include <cmath>#inc ...
- MFC对话框显示BMP图片
1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...
- BMP图片格式
BMP图片 BMP采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8bit及24bit和32bit.BMP文 ...
- Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片: ? 1 2 3 openedImg = Image.open(saveToFile); print " ...
随机推荐
- YTKNetwork
YTKNetwork 是猿题库 iOS 研发团队基于 AFNetworking 封装的 iOS 网络库,其实现了一套 High Level 的 API,提供了更高层次的网络访问抽象. YTKNetwo ...
- Red hat Linux 安装Node.js 源码安装
1. 下载源码包 http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz 2.准备安装环境,>python2.6, gcc, g++ pytho ...
- LCIS(m*n) 最长公共上升子序列
详见:http://wenku.baidu.com/view/3e78f223aaea998fcc220ea0n3的: for(int i=1;i<=n;i++) for ...
- Sqli-labs less 54
第四部分/page-4 Challenges Less-54 此系列主要是一个进阶的学习,将前面学到的知识进行更深次的运用.这一关我们主要考察的依旧是字符型注入,但是只能尝试十次.所以需要在尝试的时候 ...
- 【动态规划】 之最长公共子序列LCS
int lcs_len(char *a, char *b, int c[][N]){ int aLen=strlen(a), bLen=strlen(b), i,j; ; i<=aLen; i+ ...
- Python中编码问题?
一.键盘输入 raw_input('请输入:'.decode('utf-8').encode('gbk'))raw_input(unicode('请输入:','utf-8').encode('gbk' ...
- ubuntu下安装nodejs
前言 继前几天在wins环境下使用cygwin模拟器安装nodejs出现了一些问题后,今天我决定在ubuntu下安装nodejs,安装过程非常顺利,没有报错,看来还是linux环境给力啊,由于刚接触l ...
- ExtJs布局之accordion,fit,auto
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- Android OpenGL 学习笔记 --开始篇
转自: http://www.cnblogs.com/TerryBlog/archive/2010/07/09/1774475.html 1.什么是 OpenGL? OpenGL 是个专业的3D程序接 ...
- NameNode HA滚动升级方案
Hadoop 滚动升级非常方便,只需要在配置中增加一些选项就可以通过Hadoop自身的代码进行完成. 步骤: 1.首先到需要升级的NameService的Active NameNode上面,比如我们1 ...