mfc 查看像素,放大显示几个点

mfc 查看像素,放大显示几个点,第1张

Graphics graphics(m_hWnd);

Image img(L"xxxxjpg");

graphicsTranslateTransform(600,10);//平移

graphicsRotateTransform(25);//旋转

graphicsDrawImages(&img,0,0,a,b);//a,b放大的大小

另外,站长团上有产品团购,便宜有保证

首先创建一个位图句柄,类型为CBitmap,把加载到资源中,用LoadBitMap函数,参数是资源号。(另一种方法是先把文件加载,然后在载入到一个位图类中,用LoadImage函数,较上面种繁琐些。)

然后通过上面创建的位图,得到位图数据,用到GetBitmapBits(xy4, (LPVOID)data)函数,其中x,y为位图的长宽,data为保存位图数据的数组,类型为byte。完了之后,data数组中就包含着位图的所有RGB值,一个数据占四个字节(R、G、B、NULL)。剩下的事就好办了,要寻找某点,逐一排查是否和数组中的数据相同即可。

今天太晚了,明天给你附代码。

在 VC++ 中,可以使用 MFC 库提供的 CImage 类来判断是否为空白以及读取当前大小。

判断是否为空白

要判断一张是否为空白,可以使用 CImage 类的 GetSize() 方法获取的大小,然后遍历的每个像素点,判断像素点的 RGB 值是否为 255(即白色)。如果所有像素点的 RGB 值都为 255,则说明该为空白。

示例代码如下:

CImage image;

imageLoad(_T("testjpg")); // 加载

// 获取大小

int width = imageGetWidth();

int height = imageGetHeight();

bool isBlank = true; // 是否为空白

// 遍历每个像素点

for (int i = 0; i < width; i++) {

for (int j = 0; j < height; j++) {

// 获取像素点的 RGB 值

COLORREF color = imageGetPixel(i, j);

int r = GetRValue(color);

int g = GetGValue(color);

int b = GetBValue(color);

// 判断像素点的 RGB 值是否为白色

if (r != 255 || g != 255 || b != 255) {

isBlank = false;

break;

}

}

if (!isBlank) {

break;

}

}

if (isBlank) {

// 空白

}

else {

// 非空白

}

上述代码中,我们首先使用 CImage 类的 Load() 方法加载了一张,然后使用 GetSize() 方法获取了的大小。接着,我们使用双重循环遍历了的每个像素点,并判断像素点的 RGB 值是否为白色。如果所有像素点的 RGB 值都为白色,则将 isBlank 标记为 true,否则将其标记为 false。最后,根据 isBlank 的值来判断是否为空白。

需要注意的是,这种判断方式并不是非常准确,因为有可能存在非常浅的颜色(比如灰色)或者透明度不为 0 的像素点。因此,判断是否为空白需要根据具体的应用场景进行具体分析和处理。

读取当前大小

要读取一张的大小(即占用硬盘容量大小),可以使用 CImage 类的 GetFileSize() 方法获取。该方法返回的是占用硬盘容量大小(单位为字节),需要将其转换为 KB 才能表示为人类可读的格式。

示例代码如下:

CImage image;

imageLoad(_T("testjpg")); // 加载

// 获取大小(单位为字节)

int fileSize = imageGetFileSize();

// 转换为 KB

double fileSizeKB = fileSize / 10240;

// 输出大小(保留两位小数)

printf("The size of the image is %2f KB\n", fileSizeKB);

噗,352x288,这不是pal制式的vcd的分辨率吗

其实本来看到“急啊”什么的实在很烦躁,

不过看你也急了一天没人回了……

HBITMAP hBmp;

HDC hDC;

BITMAPINFO biBmp;

int nBmpWidth, nBmpHeight;

int i, j;

hBmp = (HBITMAP) LoadImage(NULL, TEXT("c:\\11bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

hDC = GetDC(NULL);

hDC = CreateCompatibleDC(hDC);

ZeroMemory(&biBmp, sizeof(biBmp));

biBmpbmiHeaderbiSize = sizeof(biBmpbmiHeader);

GetDIBits(hDC, hBmp, 0, 0, NULL, &biBmp, DIB_RGB_COLORS);

nBmpWidth = biBmpbmiHeaderbiWidth;

nBmpHeight = biBmpbmiHeaderbiHeight;

SelectObject(hDC, (HGDIOBJ) hBmp);

for (j = 0; j < nBmpHeight; ++j) {

    for (i = 0; i < nBmpWidth; ++i) {

        COLORREF c;

        c = GetPixel(hDC, i, j);

        //于是你拿到这个像素的颜色存入c了。然后爱干嘛干嘛……

    }

}    

DeleteObject((HGDIOBJ) hBmp);

DeleteDC(hDC);

另:32位不确定gdi能不能搞得定,24位没问题就是了。32位如果gdi搞不定的话,你用gdi+吧。没有直接写gdi+的代码是因为现在好多人还在用vc6然后又不会装、配gdi+的库,万一遇到了实在很自找麻烦……

BMP是有XY个像素点构成,每个像素点的颜色大至占据1~4字节。如果两幅BMP上所以对应点全部一样,那么这两幅BMP就是一样的,当然,这是原理上的方法。

实际比较时,根据应用场景,会简化比较过程。

例如,要识别

n

张内容不同的BMP,通常从固定位置提取点信息,然后计算一个特征值,只要每张BMP都有一个独特的特征值,我们就能识别这n副图像。

以上就是关于mfc 查看像素,放大显示几个点全部的内容,包括:mfc 查看像素,放大显示几个点、VC MFC怎么对一个BMP格式的图片的一个RGB值进行搜索 只留下这个RGB值的像素点。。、VC++如何判断图片是否为空白图片以及读取当前图片大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9284222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存