閑言碎語不用講,就請你用SDK編程來PK一下VCL庫的運行效率~
測驗程式原始碼和資源在此:https://download.csdn.net/download/DelphiGuy/15450045
程式足夠簡單,用C++Builder就是幾分鐘的事,SDK編程也應該可以在一兩個小時之內完成。就是回圈解碼、繪制10個JPEG圖片到視窗上。
要點:
1. JPEG要回圈解碼,每次繪制之前先解碼成bitmap再繪制到視窗,不是一次性解碼成bitmap,然后只繪制bitmap,那樣幀率會高得多
2. 視窗最大化,影像拉伸填滿整個客戶區
uj5u.com熱心網友回復:
在我當前的環境下(i7-6700k,16GB DDR4-3200,核顯,win10/64,1080p32位色),C++Builder 10.2.1,編譯為win64程式,release,其他默認,幀率90fps左右
windows SDK編程寫同樣的程式,如果寫得優化的話,應該可以超過這個數字,但是也不一定,看你的表現了~
uj5u.com熱心網友回復:
主要代碼如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Vcl.Imaging.Jpeg.hpp>
#pragma hdrstop
#include "Unit49_1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
const String PicNames[] = {
"Beautifull-Summer-Desktop-Wallpaper.jpg",
"Cool-Summer-Desktop-Wallpaper-HD.jpg",
"Cool-Summer-Backgrounds.jpg",
"Summer-Background-HD.jpg",
"Cool-Summer-Wallpaper-HD-1.jpg",
"Summer-Beach-Wallpaper-for-desktop.jpg",
"Nice-Summer-Desktop-for-Windows.jpg",
"Summer-Time-Background.jpg",
"Summer-Blue-Sea-Wallpaper-HD.jpg",
"Star-Fish-Summer-Desktop-Wallpaper-HD.jpg"};
TJPEGImage *Pics[10];
bool Stop = true;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LARGE_INTEGER Freq, Ticks1, Ticks2;
if (!(Stop = !Stop))
{
QueryPerformanceFrequency(&Freq);
Image1->Picture->Bitmap->Assign(Pics[0]);
while (!Stop)
{
QueryPerformanceCounter(&Ticks1);
for (int i = 0; i < 10; i++)
{
Image1->Picture->Bitmap->Assign(Pics[i]);
Application->ProcessMessages();
}
QueryPerformanceCounter(&Ticks2);
Label1->Caption = Format("%0.3f fps", ARRAYOFCONST((
Freq.QuadPart * 10.0 / (Ticks2.QuadPart - Ticks1.QuadPart))));
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for (int i = 0; i < 10; i++)
{
Pics[i] = new TJPEGImage;
Pics[i]->LoadFromFile(PicNames[i]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
for (int i = 0; i < 10; i++) delete Pics[i];
}
//---------------------------------------------------------------------------
uj5u.com熱心網友回復:
PS:我設定的資源分是0,不需要C幣uj5u.com熱心網友回復:
代碼很簡潔!高版本Unicode字串我一般加個前綴L感覺好看一點,雖然win平臺不加也一樣。uj5u.com熱心網友回復:
CSDN經常自動調整分數,我所有的資源上傳時都是0分,后來都自動調整了。
uj5u.com熱心網友回復:
PK是吧,誰來跟我這個純Win32 API土造的UI的PK一下?https://download.csdn.net/download/zhao4zhong1/7610833
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
老概為什么不一個專案一個檔案夾,而要Project49這樣?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263054.html
標籤:工具平臺和程序庫
