1. 程式人生 > >MFC CView 顯示灰度圖示例

MFC CView 顯示灰度圖示例

實現灰度貼圖,強調3個點:

1) CView定時重新整理其顯示,這在OnTimer裡實現:

::SetStretchBltMode(m_dcMem.GetSafeHdc(), COLORONCOLOR);
		StretchDIBits(m_dcMem.GetSafeHdc(), 0,0,m_iWidth, m_iHeight, 0,0, m_iWidth, m_iHeight,
			(LPBYTE)m_pData, (BITMAPINFO *)m_pInfoBmp, DIB_RGB_COLORS, SRCCOPY);

而為了讓DC明白你要畫的是灰度圖,而不是3色彩圖的辦法,是在StretchDIBits()函式裡指定BITMAPINFO變數:

((BITMAPINFO *)m_pInfoBmp)->bmiHeader.biWidth = m_iWidth;
	((BITMAPINFO *)m_pInfoBmp)->bmiHeader.biHeight = 0 - m_iHeight;

上面兩行語句在OnSize裡實現。之所以biHeight是負值,因為BITMAPINFO預設是把圖片最底下一行,放到bmp檔案的開頭儲存。所以,為了正常顯示灰度圖,而不是首尾倒置,要把biHeight設為負數。

2) m_bmpMem不能通過CreateCompatibleBmp實現,只能用下述辦法:

HINSTANCE hInstnc = AfxFindResourceHandle(MAKEINTRESOURCE(IDB_BITMAP1), RT_BITMAP);
	m_bmpMem = (HBITMAP)LoadImage(hInstnc, MAKEINTRESOURCE(IDB_BITMAP1),
		IMAGE_BITMAP, m_iWidth, m_iHeight, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION);

3) OnDraw()裡面的如下程式碼必不可少:

void CGrayScaleView::OnDraw(CDC* pDC)
{
	CGrayScaleDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;
	CDC tmpDC;
	tmpDC.CreateCompatibleDC(pDC);
	tmpDC.SelectObject(m_bmpMem);
	// TODO: 在此處為本機資料新增繪製程式碼
	pDC->BitBlt(0,0,m_iWidth, m_iHeight, &tmpDC, 0,0, SRCCOPY);
	tmpDC.DeleteDC();
}

效果:

相關推薦

MFC CView 顯示示例

實現灰度貼圖,強調3個點: 1) CView定時重新整理其顯示,這在OnTimer裡實現: ::SetStretchBltMode(m_dcMem.GetSafeHdc(), COLORONCOLOR); StretchDIBits(m_dcMem.GetSafe

Opencv入門筆記(1):影象載入、顯示、儲存、轉換

影象載入、顯示、儲存函式: 1         影象載入函式:imread()   Mat imread(const string& filename, int flags=1);     const string&型別的filename為載入影象的路徑(

OpenCV--影象的反色與顯示

對於單通道影象: void Invert1(){ Mat src,dest; src = imread("lena.jpg"); if(!src.data){

C# PictureBox 顯示單通道

// 定義灰度調色盤 System.Drawing.Imaging.ColorPalette GreyColorPalette = null; // 定義新Bitmap影象 System.Draw

C#getPixel和內存法讀取信息

max post scan ppa private p s pda unlock bsp getPixel方法: private int getPixels(Bitmap bmpobj) { int[,] data

像的直方圖

bst line [] 數據 mat == str body system 主要代碼如下: package chapter6; import java.awt.*; import java.awt.geom.Rectangle2D; import java.awt.imag

opencv生成並保存

other ims int empty ray size AC ret out #include <opencv2/opencv.hpp>#include <iostream> using namespace cv;using namespace s

的直方圖均衡化(Histogram Equalization)原理與 Python 實現

p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify; orphans: 0; widows: 0 } 原理   直方圖均衡化是一種通過使用影象直方圖,調整對比度的影象處理方法;通過對影象的強度(i

opencv讀取圖片並轉化為,並調整視窗大小

Mat src_color = imread(路徑名);//讀取原彩色圖 int c=src_color.cols/2; int r=src_color.rows/2; Mat src_gray;//彩色影象轉化成灰度圖 cvtColor(src_color, src_gray,

opencv將轉為彩色

使用opencv將一幅灰度圖轉為彩色圖。 使用函式:cvtColor();     Mat imgGray= imread("gray.jpg",0);     Mat imgRGB;     cvtColor(

(IR )轉成 RGB 預覽,畫面出現光斑/黃斑問題解決

一、背景 存在一個 IR 圖(紅外線 Infrared Radiation),需要在頁面上顯示出來,IR 圖片格式是 gray8,即 8 位的灰度圖。 Android 上的 Bitmap 圖片格式使用的是 ARGB_8888,所以需要把灰度圖轉 ARGB 圖,每個通道都為 8 位

使用K-means演算法聚類

github資料集: 智慧演算法的課件和參考資料以及實驗程式碼 我們可以用k-means演算法將灰度圖分成N個梯度 我們知道,一般的彩色影象指的是在RGB顏色空間下的影象,這樣的影象三個通道分別是R(red)G(green)B(blue)。而灰度圖指的是單通道的,將三通道的影象

基於FPGA的彩色演算法

一、演算法基礎 對於彩色轉灰度,有一個很著名的心理學公式:Gray = R0.299 + G0.587 + B*0.114; 來自於RGB888 to YCbCr的演算法公式,我們可以直接把演算法移植到FPGA上,但是我們都知道FPGA無法進行浮點運算,所以我們採取將整個式子右端先都擴大

esp32~外接攝像頭OV7255

1. 硬體接線 如下圖,github上說接線儘可能短不然噪音會很大,於是我把杜邦線給剪了又連上。 按照下面接線,使能端和地並上一個電容,這個電容用來幹嘛的(問過大佬,我又忘了。。) 2. 實際效果 3. 分析不能正常執行的原因 由於目前經驗不足,也摸不著底,不清楚d

opencv讀取影象畫素值讀取並儲存到txt檔案(二)

#include "stdafx.h" #include"cv.h" #include <stdlib.h> #include <stdio.h> #include <math.h> #include <fstream> #include &l

html 影象處理 和浮雕類PS

    html5 的canvas還有一些很酷炫的效果,接下來講的是canvas對畫素的處理,雖然略有些複雜,但實現出的效果,還是很讚的~~。    為了不讓大家失望,先強調一句:下列效果需呼叫getImageData(),而這個方法會被某些瀏覽器阻止,如

利用GDAL儲存bmp格式的(一)

GDAL是處理地理資訊的有力工具。從這篇部落格開始,我分3篇來介紹如何利用GDAL來儲存bmp格式的灰度圖。 第一篇是一個最簡單的例子:從TCP端接收資料,然後通過GDAL儲存為本地的bmp灰度檔案。這個例子有個缺點:GDAL要求資料每行位元組數被4整除,這個程式沒有對這個要求加保護措施。這個問

利用GDAL儲存bmp格式的(二)

接著上一篇。假如灰度圖的寬度不是4的整數倍,如何將這樣的圖片儲存到本地bmp檔案中?下圖是一個寬度447的圖片  這個447x340的影象不能 像上一篇那樣儲存為bmp,因為photoshop會自動在bmp檔案裡補齊4位元組,保證圖片滿足bmp格式要求。所以我將這個圖片儲存為ra

opencv圖片處理(三):得到圖片的和直方圖

1.得到直方圖和灰度圖 # -*- coding: utf-8 -*- # !/usr/bin/env python # @Time : 2018/11/19 15:56 # @Author : xhh # @Desc : 得到灰度圖以及直方圖 # @File : openc

[原始碼和文件分享]基於Qt和OpenCV實現彩色的轉換

一、實驗目的與要求 1.1 目的 熟悉Qt視覺化開發,理解C++的面向物件思想 熟悉Qt和Opencv開發環境搭建 瞭解Qt訊息機制 初步理解Opencv的用法 學會使用c++異常處理 1.2 要求 使用Qt編寫一程式,點