6.ImGui-顏色(色板)

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動!

本次游戲沒法給

內容參考于:微塵網絡安全

上一個內容:5.ImGui-按鈕

IMGui中表示顏色的的結構體

ImVec4和ImU32,如下圖紅框

它們的用法

ImVec4 color4(1.0f, 0.0f, 0.0f, 1.0f)// RGBA值表示顏色,rgb是紅綠藍,a表示透明度,它的取值范圍是0.0到1.0
ImU32 color32 = IM_COL32(255,0,0,255); // 使用IM_COL32將RGBA值轉為ImU32類型,取值范圍是0到255

如下圖使用Windows系統自帶的畫圖軟件,可以查看rgb的值,這個值對應ImU32的寫法,ImVec4的寫法是一種百分比的寫法不夠直觀

在我們的代碼中使用ImU32

色板從源碼中找,如下圖是源碼中實例

然后來到ImGui的源碼中點擊下圖紅框的按鈕

然后輸入搜索關鍵字,如下圖紅框

然后在搜索結果找到directx11的,雙擊它

然后就找到了色板的代碼,如下圖紅框

色板的代碼說明

ImGui::ColorEdit3這個會創建一個色板的控件,在控件里選擇一個顏色后,會返回給&seBan這個變量

 ImGui::ColorEdit3("clear color", (float*)&seBan);

色板的變量只能是 ImVec4類型,否則在色板中選擇顏色會有問題

然后設置顏色

完整代碼

#include "main.h"  // 包含程序所需的頭文件(包含ImGui、DirectX等聲明,具體內容在main.h中定義)// 全局變量:存儲DirectX 11核心資源和窗口狀態(整個程序共享,方便各函數訪問)
static UINT                     g_ResizeWidth = 0, g_ResizeHeight = 0; // 窗口調整大小時的新寬高(由消息處理函數記錄,主循環處理)
static ID3D11Device* g_pd3dDevice = nullptr;                          // D3D11設備對象(核心!用于創建紋理、緩沖區等渲染資源)
static ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;             // D3D11設備上下文(用于執行繪制、清空等渲染命令)
static IDXGISwapChain* g_pSwapChain = nullptr;                          // 交換鏈(雙緩沖區機制,避免畫面閃爍,負責顯示渲染結果)
static ID3D11RenderTargetView* g_mainRenderTargetView = nullptr;        // 主渲染目標視圖(綁定交換鏈的后臺緩沖區,ImGui繪制的內容會輸出到這里)
static bool                     g_SwapChainOccluded = false;           // 標記交換鏈是否被遮擋(如窗口被覆蓋,用于優化性能)// 聲明ImGui的Win32消息處理函數(來自imgui_impl_win32.cpp,用于讓ImGui處理鼠標/鍵盤輸入)
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);static void HelpMarker(const char* desc)
{ImGui::TextDisabled("(?)");if (ImGui::BeginItemTooltip()){ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);ImGui::TextUnformatted(desc);ImGui::PopTextWrapPos();ImGui::EndTooltip();}
}// 窗口消息處理函數:處理所有窗口事件(如點擊、關閉、調整大小等)
// 參數:
// - hWnd:窗口句柄(標識當前窗口)
// - msg:消息類型(如WM_SIZE表示窗口大小改變)
// - wParam:消息附加參數(如WM_SIZE中表示 resize 類型)
// - lParam:消息附加參數(如WM_SIZE中存儲新的寬高)
// 返回值:LRESULT類型(消息處理結果,0表示成功處理)
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{// 讓ImGui先處理消息(如果是ImGui的UI控件觸發的事件,優先由ImGui處理)if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))return true;  // ImGui已處理,直接返回// 根據消息類型處理不同事件switch (msg){case WM_SIZE:  // 窗口大小改變事件if (wParam == SIZE_MINIMIZED)  // 如果是窗口最小化,無需處理渲染相關return 0;// 從lParam中提取新的窗口尺寸:低16位是寬度,高16位是高度g_ResizeWidth = (UINT)LOWORD(lParam);  // 記錄新寬度g_ResizeHeight = (UINT)HIWORD(lParam); // 記錄新高度return 0;case WM_SYSCOMMAND:  // 系統命令事件(如ALT+空格調出窗口菜單)// 禁用ALT菜單(避免菜單遮擋ImGui控件,影響操作體驗)if ((wParam & 0xfff0) == SC_KEYMENU)return 0;break;  // 其他系統命令交給默認處理case WM_DESTROY:  // 窗口銷毀事件(如點擊關閉按鈕)::PostQuitMessage(0);  // 發送退出消息,主循環會捕獲并結束程序return 0;}// 其他未處理的消息,交給Windows系統默認處理return ::DefWindowProcW(hWnd, msg, wParam, lParam);
}// 創建渲染目標視圖:將交換鏈的后臺緩沖區綁定為渲染目標(ImGui繪制的內容會輸出到這里)
void CreateRenderTarget()
{ID3D11Texture2D* pBackBuffer = nullptr;  // 臨時存儲交換鏈的后臺緩沖區// 從交換鏈獲取后臺緩沖區(參數0表示第一個緩沖區,IID_ID3D11Texture2D指定緩沖區類型)g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));// 用D3D設備創建渲染目標視圖(將后臺緩沖區轉換為可渲染的目標)g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_mainRenderTargetView);// 釋放臨時緩沖區(渲染目標視圖已引用它,無需保留此指針)pBackBuffer->Release();
}// 清理渲染目標視圖:釋放資源,避免內存泄漏
void CleanupRenderTarget()
{// 釋放渲染目標視圖(COM對象需調用Release()減少引用計數,為0時自動釋放內存)if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = nullptr; }
}// 創建D3D11設備和交換鏈:初始化DirectX渲染環境
// 參數:hWnd - 窗口句柄(渲染結果會顯示在這個窗口)
// 返回值:bool - 成功創建返回true,失敗返回false
bool CreateDeviceD3D(HWND hWnd)
{// 初始化交換鏈描述(定義交換鏈的屬性,告訴系統如何創建交換鏈)DXGI_SWAP_CHAIN_DESC sd;ZeroMemory(&sd, sizeof(sd));  // 清空結構體,避免隨機值導致錯誤sd.BufferCount = 2;           // 緩沖區數量(2=雙緩沖,避免畫面閃爍)sd.BufferDesc.Width = 0;      // 緩沖區寬度(0=自動匹配窗口寬度)sd.BufferDesc.Height = 0;     // 緩沖區高度(0=自動匹配窗口高度)sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;  // 像素格式(32位色,含透明度)sd.BufferDesc.RefreshRate.Numerator = 60;  // 刷新率分子(60=60Hz)sd.BufferDesc.RefreshRate.Denominator = 1; // 刷新率分母(60/1=60Hz)sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;  // 允許切換顯示模式(如全屏/窗口)sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;   // 緩沖區用途(作為渲染目標)sd.OutputWindow = hWnd;       // 綁定的窗口(渲染結果顯示到該窗口)sd.SampleDesc.Count = 1;      // 多重采樣數量(1=無抗鋸齒,性能優先)sd.SampleDesc.Quality = 0;    // 采樣質量(0=默認)sd.Windowed = TRUE;           // 窗口模式(TRUE=窗口,FALSE=全屏)sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;  // 交換效果(交換后丟棄后臺數據,性能最好)UINT createDeviceFlags = 0;   // 創建設備的標志(0=默認,調試時可加D3D11_CREATE_DEVICE_DEBUG)// createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;  // 調試模式(需安裝DirectX SDK)D3D_FEATURE_LEVEL featureLevel;  // 存儲實際支持的D3D版本(如11.0、10.0)// 支持的D3D版本列表(優先11.0,不支持則用10.0)const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, };// 創建設備、設備上下文和交換鏈(DirectX核心函數)HRESULT res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_HARDWARE,  // 使用硬件加速(顯卡渲染)nullptr, createDeviceFlags,         // 無軟件渲染模塊,創建標志featureLevelArray, 2,               // 支持的D3D版本列表及數量D3D11_SDK_VERSION, &sd,             // SDK版本,交換鏈描述&g_pSwapChain, &g_pd3dDevice,       // 輸出交換鏈和設備&featureLevel, &g_pd3dDeviceContext // 輸出支持的版本和設備上下文);// 如果硬件加速失敗(如顯卡不支持D3D11),嘗試軟件渲染(WARP驅動)if (res == DXGI_ERROR_UNSUPPORTED)res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_WARP,   // 軟件渲染(性能較差,兼容舊設備)nullptr, createDeviceFlags,featureLevelArray, 2,D3D11_SDK_VERSION, &sd,&g_pSwapChain, &g_pd3dDevice,&featureLevel, &g_pd3dDeviceContext);if (res != S_OK)  // 創建失敗(S_OK表示成功)return false;CreateRenderTarget();  // 創建渲染目標視圖return true;
}// 清理D3D資源:釋放所有DirectX相關對象,避免內存泄漏
void CleanupDeviceD3D()
{CleanupRenderTarget();  // 先清理渲染目標// 釋放COM對象(按依賴順序釋放,避免資源沖突)if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = nullptr; }if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = nullptr; }if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = nullptr; }
}// 主函數:程序入口,控制整個程序的生命周期
int main() {// -------------------------- 步驟1:DPI適配(解決高分辨率屏幕UI模糊問題) --------------------------ImGui_ImplWin32_EnableDpiAwareness();  // 開啟ImGui對系統DPI的感知// 獲取主顯示器的DPI縮放比例(如4K屏幕可能為2.0,1080P可能為1.0)float main_scale = ImGui_ImplWin32_GetDpiScaleForMonitor(::MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY)  // 獲取主顯示器);// -------------------------- 步驟2:創建Windows窗口(ImGui需要依附的窗口載體) --------------------------// 定義窗口類(描述窗口的基本屬性,如消息處理函數、圖標等)WNDCLASSEXW wc = {sizeof(wc),                  // 結構體大小CS_CLASSDC,                  // 窗口類風格(使用專屬設備上下文,避免繪圖沖突)WndProc,                     // 消息處理函數0L, 0L,                      // 額外數據(未使用)GetModuleHandle(nullptr),    // 程序實例句柄nullptr, nullptr, nullptr, nullptr,  // 圖標、光標、背景等(用默認)L"ImGui Example",            // 窗口類名(自定義,后續創建窗口需使用)nullptr                      // 小圖標(默認)};::RegisterClassExW(&wc);  // 注冊窗口類(向系統注冊這個窗口類型)// 創建窗口(生成實際窗口)HWND hwnd = ::CreateWindowW(wc.lpszClassName,            // 窗口類名(對應注冊的類)L"Dear ImGui DirectX11 Example",  // 窗口標題WS_OVERLAPPEDWINDOW,         // 窗口風格(標準窗口,帶標題欄、關閉按鈕等)100, 100,                    // 初始位置(屏幕左上角x=100,y=100)(int)(1280 * main_scale),    // 寬度(1280 * DPI縮放,適配高分辨率)(int)(800 * main_scale),     // 高度(800 * DPI縮放)nullptr, nullptr,            // 父窗口、菜單(無)wc.hInstance, nullptr        // 程序實例、額外參數);// -------------------------- 步驟3:初始化DirectX 11(創建渲染環境) --------------------------if (!CreateDeviceD3D(hwnd))  // 調用函數創建D3D設備和交換鏈,失敗則清理資源并退出{CleanupDeviceD3D();::UnregisterClassW(wc.lpszClassName, wc.hInstance);return 1;  // 返回1表示程序異常退出}// 顯示窗口(創建后默認隱藏,需手動顯示)::ShowWindow(hwnd, SW_SHOWDEFAULT);::UpdateWindow(hwnd);  // 刷新窗口,確保立即顯示// -------------------------- 步驟4:初始化ImGui(配置UI環境) --------------------------IMGUI_CHECKVERSION();  // 檢查ImGui版本(確保編譯版本與運行時一致)ImGui::CreateContext(); // 創建ImGui上下文(UI的"全局環境")ImGuiIO& io = ImGui::GetIO(); (void)io;  // 獲取IO對象(管理輸入輸出,如鍵盤、幀率)io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // 開啟鍵盤導航(方向鍵、Tab操作UI)io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;   // 開啟手柄導航(支持游戲手柄操作)// -------------------------- 步驟5:設置UI縮放(適配DPI,避免高分辨率下UI過小) --------------------------ImGuiStyle& style = ImGui::GetStyle();style.ScaleAllSizes(main_scale);  // 縮放所有UI元素(按鈕、文本等)style.FontScaleDpi = main_scale;  // 縮放字體大小// -------------------------- 步驟6:初始化ImGui后端(連接ImGui與系統/渲染API) --------------------------ImGui_ImplWin32_Init(hwnd);       // 初始化Win32后端(處理窗口消息、輸入)ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);  // 初始化DX11后端(負責渲染UI)// -------------------------- 步驟7:程序狀態變量(控制UI顯示) --------------------------bool show_demo_window = true;    // 是否顯示ImGui演示窗口bool show_another_window = false; // 是否顯示"另一個窗口"ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); // 窗口背景色(淺藍色)//ImU32 seBan = IM_COL32(89, 255, 199, 255);// 初始化色板的顏色ImVec4 seBan = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);// -------------------------- 步驟8:主循環(程序的核心,持續運行直到退出) --------------------------bool done = false;  // 控制循環是否結束(true=退出)while (!done){// -------------------------- 8.1 處理窗口消息(如關閉、點擊等) --------------------------MSG msg;  // 存儲消息的結構體// 從消息隊列中獲取消息(PM_REMOVE表示獲取后移除,避免重復處理)while (::PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE)){::TranslateMessage(&msg);  // 翻譯消息(如鍵盤按鍵轉字符)::DispatchMessage(&msg);   // 分發消息到WndProc處理if (msg.message == WM_QUIT)  // 收到退出消息(如點擊關閉按鈕)done = true;  // 標記循環結束}if (done)break;  // 退出循環// -------------------------- 8.2 處理窗口遮擋(優化性能) --------------------------// 如果交換鏈被遮擋(如窗口被覆蓋),且確認遮擋狀態:if (g_SwapChainOccluded && g_pSwapChain->Present(0, DXGI_PRESENT_TEST) == DXGI_STATUS_OCCLUDED){::Sleep(10);  // 休眠10ms,減少CPU占用continue;     // 跳過本次循環,不渲染}g_SwapChainOccluded = false;  // 重置遮擋狀態// -------------------------- 8.3 處理窗口大小調整(避免畫面拉伸) --------------------------if (g_ResizeWidth != 0 && g_ResizeHeight != 0)  // 如果有新的窗口尺寸{CleanupRenderTarget();  // 先清理舊的渲染目標// 調整交換鏈緩沖區大小(匹配新窗口尺寸)g_pSwapChain->ResizeBuffers(0, g_ResizeWidth, g_ResizeHeight, DXGI_FORMAT_UNKNOWN, 0);g_ResizeWidth = g_ResizeHeight = 0;  // 重置尺寸變量CreateRenderTarget();  // 創建新的渲染目標(適配新尺寸)}// -------------------------- 8.4 開始ImGui新幀(準備繪制UI) --------------------------ImGui_ImplDX11_NewFrame();  // DX11后端準備新幀ImGui_ImplWin32_NewFrame(); // Win32后端準備新幀ImGui::NewFrame();          // ImGui核心準備(通知ImGui可以開始定義UI了)// -------------------------- 8.5 定義UI界面(核心:這里是你要顯示的UI) --------------------------/**ImGui::Begin()函數說明:函數聲明:bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);參數:- name:窗口標題(唯一標識,相同標題會合并窗口)- p_open:控制窗口是否顯示的指針(關閉窗口時會將其設為false)- flags:窗口標志(組合使用,如禁用標題欄、禁止移動等)*/bool i = true;  // 控制窗口是否顯示(true=顯示)// 創建一個自定義窗口:標題為"我的IMGui",禁止標題欄(NoTitleBar)和移動(NoMove)ImGui::Begin("我的IMGui", &i);// 這里可以添加其他UI控件(如按鈕、文本等),目前是空窗口// 例如:ImGui::Text("這是我的第一個ImGui窗口!");// 長文本ImGui::TextWrapped("This 521 ""aiamaiamaiamaiamaiamaiamaiamaiamaiamaiamaiam");ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink");ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow");// 帶顏色的文本框ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink2");ImGui::SameLine();ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow2");ImGui::SameLine();// 鼠標懸浮上去會顯示懸浮文本框,懸浮文本框會顯示52amHelpMarker("52am");// ImGui::ColorEdit3這個會創建一個色板的控件,在控件里選擇一個顏色后,會返回給&seBan這個變量ImGui::ColorEdit3("clear color", (float*)&seBan); // Edit 3 floats representing a color// ImGui中通過PushStyleColor()臨時修改按鈕在不同狀態下的顏色// 注意:每次PushStyleColor()后必須用PopStyleColor()恢復默認樣式,否則會影響后續UI元素// 1. 修改按鈕"正常狀態"(未被鼠標懸停、未被點擊)的背景色// 參數1:ImGuiCol_Button - 指定修改"按鈕正常狀態"的顏色// 參數2:{1.0f, 1.0f, 0.0f, 1.0f} - RGBA顏色值(每個分量范圍0.0f~1.0f)//   R=1.0f(紅色滿值)、G=1.0f(綠色滿值)、B=0.0f(藍色無)→ 混合為黃色//   A=1.0f(透明度100%,完全不透明)ImGui::PushStyleColor(ImGuiCol_Button, seBan);// 2. 修改按鈕"鼠標懸停狀態"(鼠標放在按鈕上但未點擊)的背景色// 參數1:ImGuiCol_ButtonHovered - 指定修改"按鈕被懸停時"的顏色// 參數2:{1.0f, 0.0f, 0.0f, 1.0f} → 紅色(R滿值,G、B無),完全不透明ImGui::PushStyleColor(ImGuiCol_ButtonHovered, { 1.0f,0.0f,0.0f, 1.0f });// 3. 修改按鈕"激活狀態"(鼠標按下按鈕但未松開)的背景色// 參數1:ImGuiCol_ButtonActive - 指定修改"按鈕被點擊時"的顏色// 參數2:{0.0f, 1.0f, 0.0f, 1.0f} → 綠色(G滿值,R、B無),完全不透明ImGui::PushStyleColor(ImGuiCol_ButtonActive, { 0.0f,1.0f,0.0f, 1.0f });if (ImGui::Button("anNiu")) {// 點擊按鈕執行的代碼ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "dianjianniu");}ImGui::PopStyleColor(3);ImGui::End();  // 結束窗口定義(必須與Begin配對,否則崩潰)// -------------------------- 8.6 渲染UI(將定義的UI繪制到屏幕) --------------------------ImGui::Render();  // 生成繪制命令(將UI轉換為顯卡可執行的指令)// 計算背景色(考慮透明度:clear_color.w是透明度,乘以RGB值)const float clear_color_with_alpha[4] = {clear_color.x * clear_color.w,clear_color.y * clear_color.w,clear_color.z * clear_color.w,clear_color.w};// 設置渲染目標(告訴顯卡:接下來的繪制輸出到主渲染目標)g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, nullptr);// 清空屏幕(用背景色填充,避免上一幀畫面殘留)g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, clear_color_with_alpha);// 渲染ImGui的UI(執行繪制命令,將UI畫到屏幕)ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());// -------------------------- 8.7 顯示畫面(交換前后緩沖區,展示渲染結果) --------------------------// Present函數:交換前后緩沖區(后臺緩沖區是剛渲染的畫面,前臺是正在顯示的)// 參數1:1=開啟垂直同步(VSync,防止畫面撕裂,幀率與顯示器一致);0=關閉(幀率更高)HRESULT hr = g_pSwapChain->Present(1, 0);   // 開啟垂直同步// HRESULT hr = g_pSwapChain->Present(0, 0); // 關閉垂直同步// 檢查交換鏈是否被遮擋(用于后續優化)g_SwapChainOccluded = (hr == DXGI_STATUS_OCCLUDED);}// -------------------------- 步驟9:程序退出,清理資源 --------------------------// 關閉ImGui后端ImGui_ImplDX11_Shutdown();ImGui_ImplWin32_Shutdown();ImGui::DestroyContext();  // 銷毀ImGui上下文// 清理D3D資源CleanupDeviceD3D();// 銷毀窗口和窗口類::DestroyWindow(hwnd);::UnregisterClassW(wc.lpszClassName, wc.hInstance);return 0;  // 程序正常退出
}


img

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95527.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++】Vector完全指南:動態數組高效使用

0. 官方文檔 vector 1. vector介紹 Vector 簡單來說就是順序表,是一個可以動態增長的數組。 vector是表示可變大小數組的序列容器。 就像數組一樣,vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問&#xff0c…

關于無法導入父路徑的問題

問題重現 有下面的代碼: from ..utils import Config,set_DATA_PATH DATA_PATH set_DATA_PATH()報錯如下:from ..utils import Config,set_DATA_PATH ImportError: attempted relative import beyond top-level package解決方案 #獲取當前腳本所在目錄的…

C/C++包管理工具:Conan

Conan是一個專為C/C設計的開源、去中心化、跨平臺的包管理器,致力于簡化依賴管理和二進制分發流程。Conan基于Python進行開發,支持與主流的構建系統集成,提供了強大的跨平臺和交叉編譯能力。通過Conan,開發者可以高效的創建、共享…

核心高并發復雜接口重構方案

核心高并發復雜接口重構方案 一、重構目標與原則 核心目標 提升接口性能:降低響應時間,提高吞吐量,降低資源使用 增強可維護性:拆解復雜邏輯,模塊化設計,降低后續迭代成本 保障穩定性:通過架構優化和灰度策略,確保重構過程無服務中斷 提升擴展性:設計靈活的擴展點,…

C++容器內存布局與性能優化指南

C容器的內存布局和緩存友好性對程序性能有決定性影響。理解這些底層機制,能幫你寫出更高效的代碼。 一、容器內存布局概述 不同容器在內存中的組織方式差異顯著,這直接影響了它們的訪問效率和適用場景。容器類型內存布局特點元數據位置元素存儲位置std::…

Beautiful.ai:AI輔助PPT工具高效搞定排版,告別熬夜做匯報煩惱

你是不是每次做 PPT 都頭大?找模板、調排版、湊內容,熬大半夜出來的東西還沒眼看?尤其是遇到 “明天就要交匯報” 的緊急情況,打開 PPT 軟件半天,光標在空白頁上晃來晃去,連標題都想不出來 —— 這種抓瞎的…

阿里云攜手MiniMax構建云原生數倉最佳實踐:大模型時代的 Data + AI 數據處理平臺

MiniMax簡介MiniMax是全球領先的通用人工智能科技公司。自2022年初成立以來,MiniMax以“與所有人共創智能”為使命,致力于推動人工智能科技前沿發展,實現通用人工智能(AGI)。MiniMax自主研發了一系列多模態通用大模型,…

一鍵生成PPT的AI工具排名:2025年能讀懂你思路的AI演示工具

人工智能正在重塑PPT制作方式,讓專業演示變得觸手可及。隨著人工智能技術的飛速發展,AI生成PPT工具已成為職場人士、學生和創作者提升效率的得力助手。這些工具通過智能算法,能夠快速將文本、數據或創意轉化為結構化、視覺化的演示文稿&#…

數據庫基礎知識——聚合函數、分組查詢

目錄 一、聚合函數 1.1 count 1.1.1 統計整張表中所有記錄的總條數 1.1.2 統計單列的數據 1.1.3 統計單列記錄限制條件 1.2 sum 1.3 avg 1.4 max, min 二、group by 分組查詢 2.1 語法 2.2 示例 2.3 having 一、聚合函數 常用的聚合函數 函數說明count ([distinc…

改 TDengine 數據庫的時間寫入限制

一 sql連數據庫改 改 TDengine 數據庫的時間寫入限制 之前默認了可寫入時間為一個月,調整為10年,方便測試: SHOW DATABASES;use wi; SELECT CONCAT(ALTER TABLE , table_name, KEEP 3650;) FROM information_schema.ins_tables WHERE db_…

數碼視訊TR100-OTT-G1_國科GK6323_安卓9_廣東聯通原機修改-TTL燒錄包-可救磚

數碼視訊TR100-OTT-G1_國科GK6323_安卓9_廣東聯通原機修改-TTL燒錄包-可救磚刷機教程數碼視訊 TR100-G1 TTL 燒錄刷機教程固件由廣東聯通 TR100-G1 28 原版修改,測試一切正常1、把刷機文件解壓出 備用,盒子主板接好 TTL,不會接自行查找 TTl 接…

TVS防護靜電二極管選型需要注意哪些參數?-ASIM阿賽姆

TVS防護靜電二極管選型關鍵參數詳解TVS(Transient Voltage Suppressor)二極管作為電路防護的核心器件,在電子設備靜電防護(ESD)、浪涌保護等領域發揮著重要作用。本文將系統性地介紹TVS二極管選型過程中需要重點關注的參數指標,幫助工程師做出合理選擇。…

項目經理為什么要有一張PMP?認證?

在項目管理日益成為企業核心競爭力的今天,PMP已成為項目經理職業發展的重要“通行證”。這張由美國項目管理協會(PMI)頒發的全球公認證書,不僅是專業能力的象征,更在職業競爭力、項目成功率、團隊協作等多個維度為項目…

Qt中QSettings的鍵值使用QDataStream進行存儲

1. QDataStream介紹 數據流是編碼信息的二進制流,與主機的操作系統、CPU 或字節順序完全無關。例如,Windows 系統下 PC 寫入的數據流可由運行 Solaris 的 Sun SPARC 讀取。 您還可以使用數據流讀/寫raw unencoded binary data 。如果需要 "解析 &…

Typer 命令行工具使用示例

Typer 命令行工具使用示例 示例1:簡單問候程序 代碼 import typerapp typer.Typer()app.command() def greet(name: str):"""簡單的問候命令"""typer.echo(f"Hello {name}!")if __name__ "__main__":app()使用…

關于CAN總線bus off 理論標準 vs 工程實踐

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

CAN堆棧

PDU映射到HOH將硬件對象句柄HOH抽象成為硬件抽象層CanIf將pdu映射到硬件對象句柄上一個HOH代表一個Can控制器的一個消息緩沖區發送緩存區當所有Can硬件資源被占用時,LPDU存儲在緩沖區中。發送取消為了解決優先級反轉的問題,高優先級L-PDU會請求取消低優先…

sub3G和sub6G的區別和聯系

Sub-3G 和 Sub-6G 的區別與聯系Sub-3G 和 Sub-6G 是無線通信中頻段的不同分類,尤其在4G LTE和5G網絡中,定義了無線信號傳輸的不同頻率范圍。具體來說,Sub-3G 通常指的是低于3 GHz的頻段,而 Sub-6G 是指低于6 GHz的頻段。這些頻段的…

【數據可視化-106】華為2025上半年財報分析:用Python和Pyecharts打造炫酷可視化大屏

🧑 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Scikit-learn Python機器學習 - 特征預處理 - 歸一化 (Normalization):MinMaxScaler

鋒哥原創的Scikit-learn Python機器學習視頻教程: 2026版 Scikit-learn Python機器學習 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程主要講解基于Scikit-learn的Python機器學習知識,包括機器學習概述,特征工程(數據…