Sử dụng kỹ thuật gì để vẽ một hình "trong suốt" trên màn hình cmd với C++?

Như tiêu đề, bữa trước em có tình cờ thấy một câu đố của một bạn trên group lập trình C/C++ và câu đố đó là viết một chương trình để có thể vẽ hay “đục” một lỗ trong suốt lên màn hình cmd như này:

Hôm nay lục lại tấm ảnh nên tò mò muốn hỏi mọi người ở đây sử dụng kỹ thuật giờ để làm được như vậy ạ?
Có thể gợi ý cho em vài từ khóa để tìm hiểu thì tốt quá.
Em cám ơn.

2 Likes

có vẻ khó nhỉ… hic.

2 Likes

Theo kinh nghiệm 8 năm vọc vạch và soi nhiều bức ảnh thì đây là kỹ thuật… photoshop :sweat:
Có lẽ nhiều người tin vì 2 chi tiết này có vẻ hợp lý, nhưng chẳng có gì khó để làm cả :smile:
Hình tròn rất có vấn đề, rìa trên và rìa phải có dư 2 vạch trắng, ảnh này nhất định đã được chỉnh sửa

4 Likes

làm được đó :smile::joy: WinGDI. Cái thư viện này cũ kĩ lắm rồi

#include <iostream>
#include <windows.h>

int main()
{
    HWND hWnd = GetConsoleWindow();

    if (hWnd)
    {
        SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
        SetLayeredWindowAttributes(hWnd, RGB(255,255,0), 0, LWA_COLORKEY);
        HDC hdc = GetWindowDC(hWnd);
        if (hdc)
        {
            HBRUSH yellowBrush = (HBRUSH)CreateSolidBrush(RGB(255,255,0));
            HPEN redPen = (HPEN)CreatePen(PS_SOLID, 2, RGB(255,0,0));
            HBRUSH oldbrush = (HBRUSH)SelectObject(hdc, GetStockObject(NULL_BRUSH));
            SelectObject(hdc, yellowBrush);
            SelectObject(hdc, redPen);

            Ellipse(hdc,90,90,150,150);

            SelectObject(hdc, oldbrush);
        }
    }
}

lệnh compile link trên codeblocks (nhớ link với gdi -lgdi32 là được)

g++.exe -Wall -fexceptions -O2 -std=c++14  -c C:\Users\tri\Dropbox\Cpp\HoleInConsole\main.cpp -o obj\Release\main.o
g++.exe  -o bin\Release\HoleInConsole.exe obj\Release\main.o  -lgdi32 -s  

(code trên vọc thôi chứ còn phải giải phóng pen, brush, hdc gì tùm lum nữa)


với google ở đâu nữa quên rồi :joy:

vọc từ hôm qua tới giờ gu gồ mới ra :joy:

1 Like

Kinh thế =)) Xem ra mình còn non kém quá (Không nghĩ có thể làm được điều này trên màn hình console) :joy:

hôm qua mình vọc được vẽ hình tròn màu vàng viền đỏ, gu gồ mãi mà ko thấy cách nào set color key màu vàng cho cái handle hdc hay hwnd gì đó, hôm nay thế nào 1 phát lại gu gồ ra :joy:

2 Likes

Tuyệt vời!!!, em cám ơn ạ :))

1 Like

Thánh Sốp đây rồi =]].

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?