桌面下雪 源代码

【黑科技】用Python在Windows桌面上实现“魔法扫雪“特效!附完整源码与深度解析 作为一名Python开发者,我们常常沉迷于用代码解决实际问题。但今天,我要带大家探索Python的另一个有趣领域——**桌面美化特效开发**。本文将完整展示如何用PyQt5打造一个会下雪的动态桌面,更神奇的是还能用"魔法扫帚"扫开雪花!这个项目不仅视觉效果惊艳,更蕴含着多个高级编程技巧,值得深入探讨。 阅读详情

//DELPHI

 interface

uses
   Windows, Messages, SysUtils, Classes, Graphics;

const
   SnowNumber = 500; // 雪点数量-1

   procedure StartSnow;
   procedure StopSnow;
implementation

type
   SnowNode = record
     Point: TPoint;   // 雪点位置
     Color: Integer; // 先前颜色
     Speed: Integer; // 下落速率
     nMove: Integer; // 下落距离
     Stick: Integer; // '粘连'度
   end;

   TSnowThread=class(TThread)
   public
     procedure Execute; override;
   end;

var
   SnowNodes: array[0..SnowNumber] of SnowNode; // 雪点数组
   hTimer: Integer; // '随机风向'时钟句柄
   CrWind: Integer; // 当前'风向' ( -1 ~ 1 )
   CrStep: Integer; // 当前循环步数(用于限速)
   ScreenWidth, ScreenHeight: Integer; // 屏幕尺寸
   SnowThread:TSnowThread;

   procedure StartSnow;
   begin
     if SnowThread=nil then
       SnowThread:=TSnowThread.Create(false);

   end;

   procedure StopSnow;
   begin
     if SnowThread<>nil then
     begin
       SnowThread.Terminate;
       SnowThread.WaitFor;
       SnowThread.free;
       SnowThread:=nil;
     end;
   end;



   // 取屏幕尺寸 -> ScreenWidth, ScreenHeight
procedure GetScreenSize;
begin
   ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
   ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
end;

   // '随机风向'时钟
procedure TimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
begin
   SetTimer(0, hTimer, (Random(27)+4) * 500, @TimerProc); // 重设下次风向改变时间
   if (CrWind <> 0) then CrWind := 0 else CrWind := Random(3) - 1; // 修改风向
end;

   // 初始化雪点数组
procedure InitSnowNodes;
var
   hScreenDc, J: Integer;
begin
   hScreenDc := CreateDC('DISPLAY', nil, nil, nil);
   for J := 0 to SnowNumber do
   begin
     SnowNodes[J].Point.X := Random(ScreenWidth);
     SnowNodes[J].Point.Y := Random(ScreenHeight);
     SnowNodes[J].Color := GetPixel(hScreenDc, SnowNodes[J].Point.X, SnowNodes[J].Point.Y);
     SnowNodes[J].Speed := Random(5) + 1; // 几次循环作下落一次 (1~5)
     SnowNodes[J].nMove := Random(SnowNodes[J].Speed)+1; // 每次下落距离(1~5)
     SnowNodes[J].Stick := 30 - Random(SnowNodes[J].Speed); // '粘连'度(几次循环作一次粘连判断)
   end;
   DeleteDC(hScreenDc);
end;

   // 移动雪点 ..
procedure MoveSnowNodes;
var
   hScreenDc, I, X, Y: Integer;
begin
   hScreenDc := CreateDC('DISPLAY', nil, nil, nil);
   for I := 0 to SnowNumber do
   begin
    // 控制雪点下降速率
     if (CrStep mod SnowNodes[I].Speed) <> 0 then Continue;
    // 恢复上次被覆盖点
     if GetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y) = $FFFFFF then
       SetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y, SnowNodes[I].Color);
    // 根据风向作随机飘落
     X := SnowNodes[I].Point.X + Random(3) - 1 + CrWind;
     Y := SnowNodes[I].Point.Y + SnowNodes[I].nMove;
    // 积雪(停留)效果处理
     if ( (CrStep mod SnowNodes[I].Stick) = 0 ) // 降低积雪概率 ..
        and ( GetPixel(hScreenDc, X, Y) <> GetPixel(hScreenDc, X, Y+1) ) // '边缘'判断
        and ( GetPixel(hScreenDc, X-1, Y) <> GetPixel(hScreenDc, X-1, Y+1) )
        and ( GetPixel(hScreenDc, X+1, Y) <> GetPixel(hScreenDc, X+1, Y+1) ) then
     begin
      // 稍微调整坐标
       if GetPixel(hScreenDc, X, Y-1) = GetPixel(hScreenDc, X, Y-2) then Dec(Y) // 上边缘
       else if GetPixel(hScreenDc, X, Y+1) = GetPixel(hScreenDc, X, Y+2) then Inc(Y); // 下边缘
       Inc(X, CrWind);
      // 画三个点(雪花)
       SetPixel(hScreenDc, X, Y, $FFFFFF);
       SetPixel(hScreenDc, X+1, Y+1, $FFFFFF);
       SetPixel(hScreenDc, X-1, Y+1, $FFFFFF);
      // 重生雪点
       SnowNodes[I].Point.Y := Random(10);
       SnowNodes[I].Point.X := Random(ScreenWidth);
       SnowNodes[I].Color := GetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y);
     end else
     begin
       if (X < 0) or (X > ScreenWidth) or (Y > ScreenHeight) then // 超出范围则重生雪点
       begin
         SnowNodes[I].Point.Y := Random(10);
         SnowNodes[I].Point.X := Random(ScreenWidth);
         SnowNodes[I].Color := GetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y);
       end else
       begin
        // 保存颜色并绘制雪点
         SnowNodes[I].Color := GetPixel(hScreenDc, X, Y);
         SetPixel(hScreenDc, X, Y, $FFFFFF);

        // 此时保存新雪点位置
         SnowNodes[I].Point.X := X;
         SnowNodes[I].Point.Y := Y;
       end;
     end;
   end;
   DeleteDC(hScreenDc);
   Inc(CrStep);
end;  


{ TSnowThread }
procedure TSnowThread.Execute;
var
   ThreadMsg: TMsg;   // 标准消息结构体
   Frequency: Int64; // 高性能定时器频率
   StartCt, EndCt: Int64; // 高性能定时器计数
   ElapsedTime: Extended; // 时间间隔
begin
   Randomize;   GetScreenSize;   InitSnowNodes; // 初始化
   QueryPerformanceFrequency(Frequency); // 高性能定时器频率
   hTimer := SetTimer(0, 0, Random(5)*500, @TimerProc); // 安装随机风向定时器
   repeat // 消息循环
     QueryPerformanceCounter(StartCt); // 执行运算前 计数值
     if PeekMessage(ThreadMsg, 0, 0, 0, PM_REMOVE) then // 取到消息
     begin
       case ThreadMsg.message of
         WM_TIMER:
           TimerProc(0, 0, 0, 0); // 预设风向改变时间已到

         WM_DISPLAYCHANGE:
           begin
           GetScreenSize; // 重新取屏幕尺寸
           InitSnowNodes; // 初始化雪点数组
           end;
       end;
     end;
     MoveSnowNodes; // 移动雪点
     QueryPerformanceCounter(EndCt); // 执行运算后计数值
     ElapsedTime := (EndCt-StartCt)/Frequency;
     if (ElapsedTime < 0.0005) then Sleep(2) // 简单限速
     else if (ElapsedTime < 0.0010) then Sleep(1)
          else if (ElapsedTime < 0.0015) then Sleep(0);
   until Terminated;
   KillTimer(0, hTimer); // 删除随机风向定时器
   InvalidateRect(0, nil, TRUE); // 刷新屏幕
end;

initialization
   StartSnow;

finalization
   StopSnow;
end.

//SDK

//在Vista下,用SetPixel 画不点,只能用FillRect来画点了;暂时没找到为什么

//还有在VISTA下用CreateDC,然后进行画图,绘制速度很慢,只有去掉VISTA的玻璃效果,

//才能正常绘制
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<iostream.h>
const int SnowNumber=500;   //Ñ©µãÊýÁ¿
struct SnowNode{
POINT postion;     //Ñ©µãλÖÃ
int iColor;      //ÏÈǰµÄÑÕÉ«
int iSpeed;      //ÏÂÂäËÙ¶È
int iMove;      //ÏÂÂä¾àÀë
int iStick;      //Õ³Ìù¶È
};

SnowNode SnowNodes[SnowNumber]; //Ñ©µãÊý×é
int hTimer=0;
int CrWind=0;
int CrStep=0;      //µ±Ç°Ñ­»·²½Êý£¨ÓÃÓÚÏÞËÙ£©
int ScreenWidth=0;     //ÆÁÄ»¿í¶È
int ScreenHeight=0;     //ÆÁÄ»¸ß¶È
//CBrush brush;
void GetScreenSize();
void CALLBACK TimerProc(HANDLE hWnd,UINT uMsg,UINT idEvent,DWORD dwTime);
void InitSnowNodes();
void MoveSnowNodes();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
/*
HDC hScreenDC=0;
int j=0;
hScreenDC=CreateDC("DISPLAY",NULL,NULL,NULL);

RECT rect = {300,0,500,100} ;
::FillRect(hScreenDC, &rect, (HBRUSH)::GetStockObject(WHITE_BRUSH)) ;
DeleteDC(hScreenDC) ;
*/


MSG msg;   //±ê×¼WindowsÏûÏ¢
LARGE_INTEGER Frequency; //¸ßÐÔÄܶ¨Ê±Æ÷ƵÂÊ
LARGE_INTEGER StartCt,EndCt;//¸ßÐÔÄܶ¨Ê±Æ÷¼ÆÊý
double ElapsedTime;    //ʱ¼ä¼ä¸ô
srand((unsigned)time(NULL));
GetScreenSize();
InitSnowNodes();
QueryPerformanceFrequency(&Frequency);
hTimer=SetTimer(0,0,rand()%5*500,(TIMERPROC)TimerProc);
if(hTimer==0)
{
   MessageBox(0,TEXT("´´½¨¶¨Ê±Æ÷ʧ°Ü"),TEXT("Ìáʾ"),MB_OK|MB_ICONINFORMATION);
   return -1;
}
RegisterHotKey(0,0,MOD_CONTROL,(int)'L');
while(1)
{
   QueryPerformanceCounter(&StartCt);   //Ö´ÐÐÔËËãǰ¼ÆÊýÖµ
   if(PeekMessage(&msg,0,0,0,1))
   {
    switch(msg.message)
    {
     case WM_TIMER:   //Ô¤Éè·çÏò¸Ä±äʱ¼äÒѵ½
      TimerProc(0,0,0,0);
      break;
     case WM_HOTKEY:
      KillTimer(0,hTimer); //ɾ³ýËæ»ú·çÏò¶¨Ê±Æ÷
      UnregisterHotKey(0,0); //ɾ³ýÍ˳öÈȼü
      InvalidateRect(0,NULL,true);
      exit(1);
      break;
     case WM_DISPLAYCHANGE:
      GetScreenSize();   //ÖØÐÂÈ¡ÆÁÄ»µÄ³ß´ç
      InitSnowNodes();   //³õʼ»¯Ñ©µãµÄÊý×é
      break;
    }
   }
   MoveSnowNodes();
   QueryPerformanceCounter(&EndCt); //Ö´ÐÐÔËËãºóµÄ¼ÆÊýÖµ
   ElapsedTime=(double)(EndCt.QuadPart-StartCt.QuadPart)/Frequency.QuadPart;
   if(ElapsedTime<0.0005)
   {
    Sleep(2);
   }else if(ElapsedTime<0.0010)
   {
    Sleep(1);
   }else if(ElapsedTime<0.0015)
   {
    Sleep(3);
   }
}
//MessageBox(0,TEXT("ÏûÏ¢"),TEXT("ÏûÏ¢"),MB_OK|MB_ICONINFORMATION);

return 0;
}

void GetScreenSize()
{
ScreenWidth=GetSystemMetrics(SM_CXSCREEN);
ScreenHeight=GetSystemMetrics(SM_CYSCREEN);

return;
}

void CALLBACK TimerProc(HANDLE hWnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
//MessageBox(0,TEXT("ÏûÏ¢"),TEXT("ÏûÏ¢"),MB_OK|MB_ICONINFORMATION);
srand((unsigned)time(NULL));
if(hTimer==0)
{
   MessageBox(0,TEXT("´´½¨¶¨Ê±Æ÷ʧ°Ü"),TEXT("Ìáʾ"),MB_OK|MB_ICONINFORMATION);
   return;
}
SetTimer(0,hTimer,((rand()%27+4)*500),(TIMERPROC)TimerProc); //ÖØÉèÏ´ηçÏò¸Ä±äʱ¼ä
if(CrWind!=0)
{   //Ð޸ķçÏò
   CrWind=0;
}else
{
   CrWind=rand()%3-1;
}

return;
}
//#include "atlbase.h"
void InitSnowNodes()
{
HDC hScreenDC=0;
int j=0;
hScreenDC=CreateDC("DISPLAY",NULL,NULL,NULL);
// hScreenDC=GetDC(0);
if(hScreenDC==NULL)
{
   MessageBox(0,"»ñÈ¡ÆÁÄ»DCʧ°Ü!","ÐÅÏ¢",MB_OK|MB_ICONERROR);
   return;
}
srand((unsigned)time(NULL));
for(j=0; j<SnowNumber; j++)
{
   SnowNodes[j].postion.x=rand()%ScreenWidth;
   SnowNodes[j].postion.y=rand()%ScreenHeight;
   SnowNodes[j].iColor=GetPixel(hScreenDC,SnowNodes[j].postion.x,SnowNodes[j].postion.y);
   SnowNodes[j].iSpeed=(rand()%5+1);   //ÿ´ÎÏÂÂä¾àÀ루1~5£©
   SnowNodes[j].iStick=(30-rand()%SnowNodes[j].iSpeed); //Õ³Ìù¶È£¨¼¸´ÎÑ­»·×öÒ»´ÎÕ³Ìù¶ÈÅжϣ©
   //cout<<SnowNodes[j].postion.x<<"   Y:"<<SnowNodes[j].postion.y<<endl;
}
DeleteDC(hScreenDC);
}

void MoveSnowNodes()
{
//MessageBox(0,TEXT("ÏûÏ¢"),TEXT("ÏûÏ¢"),MB_OK|MB_ICONINFORMATION);
HDC hScreenDC=0;
srand((unsigned)time(NULL));
int x=0,y=0,i=0;
hScreenDC=CreateDC("DISPLAY",NULL,NULL,NULL);
// hScreenDC=GetDC(0);
if(hScreenDC==NULL)
{
   MessageBox(0,"»ñÈ¡ÆÁÄ»DCʧ°Ü£¡","ÐÅÏ¢",MB_OK|MB_ICONERROR);
   return;
}
// TextOut(hScreenDC,0,0,"ÊäÈëÄúÒªÏÔʾµÄÐÅÏ¢",0);
HBRUSH hbr2 = CreateSolidBrush(RGB(255,255,255));

for(i=0; i<SnowNumber; i++)
{ //¿ØÖÆÑ©µãϽµËÙ¶È
   if((CrStep%SnowNodes[i].iSpeed)!=0)
   {
    continue;
   }
   if((GetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y))==0XFFFFFF)
   {
    //»Ö¸´Éϴα»¸²¸Çµã
   // SetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y,SnowNodes[i].iColor);

    HBRUSH hbr = CreateSolidBrush(SnowNodes[i].iColor);
    RECT rect = {SnowNodes[i].postion.x,SnowNodes[i].postion.y,SnowNodes[i].postion.x+1,SnowNodes[i].postion.y+1} ;
    ::FillRect(hScreenDC, &rect, hbr) ;
    DeleteObject(hbr);

   }
   x=SnowNodes[i].postion.x+rand()%3+CrWind; //¸ù¾Ý·çÏò×÷Ëæ»úÆ®Âä
   y=SnowNodes[i].postion.y+SnowNodes[i].iSpeed;
//   y=SnowNodes[i].postion.y+SnowNodes[i].iMove;

   if(((CrStep%SnowNodes[i].iStick)==0) && (GetPixel(hScreenDC,x,y)!=(GetPixel(hScreenDC,x,y+1))) &&
    (GetPixel(hScreenDC,x-1,y) != GetPixel(hScreenDC,x-1,y+1)) &&
    (GetPixel(hScreenDC,x+1,y) != GetPixel(hScreenDC,x+1,y+1)))
   {
    if(GetPixel(hScreenDC,x,y-1)==GetPixel(hScreenDC,x,y-2))
    { //ÉÔÉÔµ÷Õû×ø±ê
     y--;
    }else
    {
     if(GetPixel(hScreenDC,x,y-1)==GetPixel(hScreenDC,x,y-2))
     {
      y++;
     }
     x+=CrWind;
    }
   // SetPixel(hScreenDC,x,y,0XFFFFFF);
   // SetPixel(hScreenDC,x+1,y+1,0XFFFFFF);
   // SetPixel(hScreenDC,x-1,y+1,0XFFFFFF);
    RECT rect1 = {x,y,x+1,y+1} ;
    ::FillRect(hScreenDC, &rect1, hbr2) ;
    RECT rect2 = {x+1,y+1,x+2,y+2} ;
    ::FillRect(hScreenDC, &rect2, hbr2) ;
    RECT rect3 = {x-1,y+1,x,y+2} ;
    ::FillRect(hScreenDC, &rect3, hbr2) ;
    SnowNodes[i].postion.x=rand()%ScreenWidth; //ÖØÉúÑ©µã
    SnowNodes[i].postion.y=rand()%10;
    SnowNodes[i].iColor=GetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y);
   
   }else
   {
   
    if(x<0 || x>ScreenWidth || y>ScreenHeight)
    {
     SnowNodes[i].postion.y=(rand()%10);
     SnowNodes[i].postion.x=(rand()%ScreenWidth);
     SnowNodes[i].iColor=GetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y);
    }else
    {   
     SnowNodes[i].iColor=GetPixel(hScreenDC,x,y);
     //SetPixel(hScreenDC,x,y,RGB(255,255,255));

     RECT rect = {x,y,x+1,y+1} ;
     ::FillRect(hScreenDC, &rect, hbr2) ;
   
     SnowNodes[i].postion.x=x;
     SnowNodes[i].postion.y=y;
    }
   
   }
}
DeleteDC(hScreenDC);
DeleteObject(hbr2);
CrStep++;
}

 

桌面下雪效果程序实现与学习:vc++源代码 在多线程编程中,线程是指程序中的一个执行流程,它是系统能够进行运算调度的最小单位,大多数操作系统都提供了多线程技术,以支持同时执行多个任务,提高程序的运行效率。在C++中,我们可以通过<thread>头文件中的线程库创建和管理线程。下面是一个创建和启动线程的基本示例:i < n;++i) {// 创建并启动线程t.join();// 等待线程完成return 0;在该示例中,对象t被创建并传递了函数和参数10,表示打印0到9的数字。调用join。 阅读详情

相关推荐

C#桌面程序实现生日快乐下雪动画特效源码项目

原生按钮太呆板?那就自己画一个圆角按钮!继承Button类,重写OnPaint然后在窗体中使用它:btn.Text = "开始下雪";是不是立马精致多了?🎨你看,一个“生日快乐”程序,居然能牵扯出这么多知识点:消息机制、图形渲染、动画循环、性能调优、跨平台发布……但这不正是编程的魅力所在吗?💡我们学技术,不只是为了写出能跑的代码,更是为了做出能让别人嘴角上扬的产品。

weixin_32312889的博客 857

window MFC桌面下雪程序

刚接触MFC没多久,很多知识学过就忘,所以急需写一个小程序来巩固下知识,从小就喜欢雪花,喜欢在大雪中奔跑,喜欢大雪中两人手牵手的浪漫。如果能写个桌面下雪程序既是对雪花的喜爱也能练练window下的编程岂不是两全其美。 说做就做,让我们一起来完成一个漂亮的雪花程序 首先分析下程序,屏幕下雪大致可以分为以下步骤 1、创建雪花类,初始化雪花 2、在OnPaint()函数中绘制雪花 3、在定时器

魏亚恒的博客 1560

桌面飘雪花源代码.雪花.桌面下雪源代码

桌面飘雪花.源代码.很适合初学者学习参考

c语言 桌面下雪程序,用C++写的在桌面上飘雪的特效程序

#include〈windows.h〉#include〈time.h〉#include〈stdlib.h〉#include〈iostream.h〉const int SnowNumber=500; //雪点数量struct SnowNode{POINT postion; //雪点位置int iColor; //先前的颜色int iSpeed; //下落速度int iMove; //下...

weixin_27388739的博客 1609

桌面下雪程序

桌面下雪程序,刷新窗口雪花仍然在,不影响使用电脑。使用纯WIN32/C++/C编写

桌面下雪的程序代码

自己在网上找到一个代码模仿写的 写得不到好 很希望哪位能帮个忙 完善下下

桌面下雪小程序 WIN32

想起以前还没有上大学的时候,过圣诞节,有同学发了一个桌面下雪的小程序。当看到效果的,哇,当时觉得好高端,就想什么时候我也能写出这么一个程序。学了计算机之后,发现这完全可以实现。于是就准备写一个,当卡壳的时候在网上找资料,结果发现在网上找到的效果都不尽如意(如仅仅桌面上画白色的点,而且刷新之后就没有了,绝没有针对的意思,我只是说不是我想要的效果)。后来看书找资料终于是完成了。使用WIN32 C/C+

huanggl的专栏 4317

桌面下雪效果(二)

增加了系统托盘图标,并且取消了任务栏的图标显示

C++:下雪

在2023年12月15日——12月16日,我所在的地方下了第一场雪,于是我决定做一个用C++实现下雪花的场景,有兴趣的朋友可以学习一下哦!下雪(c++)

喷火龙廖的博客 874

桌面下雪效果

简单的雪花飘落效果,后期待补充更多功能,字数补丁

eDP/DP接口简介

目前,在视频传输协议以及接口领域,外部接口主要是DP与HDMI两分天下,当然之前出现过很多接口-VGA, DVI等等,最新平台基本以这两个为主;笔记本内部接口就基本上使用eDP((Embedded Display Port))作为标准接口来驱动液晶屏了。那么问题来了,eDP和DP,是完全兼容的么?eDP,DP,HDMI,这三种接口的显示器,可以插在同一个接口上使用么?这篇文章,就会从硬件和一部分协议的角度分析一下这三大协议。

weixin_50518899的博客 2万+

一个让桌面下雪的小程序(并非屏幕保护)

以前见到过一个有趣的小程序,叫snow,可以在桌面上下雪,学还可以在窗体边缘、图像边缘堆积,关键是并非屏幕保护,可以边下雪便运行其它程序。 我就用VB模仿了一个。先贴上效果图: 源代码 PrivateDeclareFunctionGetDCLib"user32"(ByValhwndAsLong)AsLong 'GetDC...

weixin_30673611的博客 876

别再死记硬背了!用51单片机的AD/DA和PWM,亲手做个简易示波器信号发生器

本文详细介绍了如何利用51单片机的PWM和AD/DA功能制作简易示波器信号发生器。通过PWM模拟DAC输出波形,结合XPT2046 ADC进行信号测量,实现方波、三角波和正弦波的生成与显示。项目不仅成本低廉,还能帮助电子爱好者深入理解51单片机的核心功能,是理论与实践结合的绝佳案例。

weixin_28675839的博客 265

WinForm桌面下雪源码

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.Inter...

weixin_34221332的博客 202

虚拟零售智能客服架构设计:如何用大模型实现多轮对话与精准推荐?

想象一下,当你在一个电商平台购物时,遇到了一个能像你的专属导购一样,不仅能听懂你模糊的需求(“我想买一件适合夏天去海边玩,又能兼顾日常通勤的裙子”),还能记得你之前提到的尺码偏好和预算,甚至在你犹豫时,主动推荐几款符合你风格且正好有促销活动的商品——这不再是科幻电影中的场景,而是基于大语言模型(LLM)技术的新一代虚拟零售智能客服能够提供的体验。这一层是我们架构设计的重点,会在后续章节详细展开。如基于CRF、RNN的模型,或基于规则的状态更新,通常需要大量标注的对话状态数据,且对新领域、新槽位的适应性差。

Java大师兄的博客 1589

UDS服务应该支持哪些否定响应码

UDS服务应该支持哪些否定响应码所有服务都需支持的否定响应码具体的服务需要支持的否定响应码否定响应码定义及其取值 USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组: 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。 0x01 – 0x7F:诊断通信相关的否定响应码。 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定

闲聊汽车软件开发 4万+

忙活半天只为了看雪--送给大家的冬至礼物

只是为了看一场雪……

A Lucky Boy的博客 3499

Pytorch实现EdgeCNN(基于PyTorch实现)

本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码实例都附带有完整的代码。

优快云 精品推荐 1万+

桌面下雪小程序

使用win32模式编译. //#include "stdafx.h" #include #include #include //#pragma comment(/Entry:WinMain) #define ID_TIMER 1 #define SNOWNUM 500 // 雪花数量 #define CONTRAST 50 // 对比度

wangjieest的专栏 3488

【即插即用模块】Transformer篇 | MICCAI 2025 | ReLULA:Q/K双ReLU线性注意力,既轻又准!

本文介绍了一种基于线性注意力的多实例学习模块(Lin-MIL),适用于高分辨率视觉任务。该模块通过转置计算顺序和使用ReLU激活,将计算复杂度从O(n²d)降至O(nd²),同时提升特征判别性。核心创新包括Q/K双ReLU激活、可学习温度系数和数值稳定归一化。实验表明,该模块在轻量化视觉任务中优于传统线性注意力和Mamba架构。代码实现了模块化矩阵乘法,支持即插即用替换ViT自注意力层。该模块特别适合计算病理学等需要处理大量图像补丁的任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 140

【时空图神经网络 & 交通】相关模型3:STFGNN | 空间-时间依赖性 | 基于数据驱动的方法来生成“时间图” | 时空融合图模块,门控卷积模块 | 动态时间规整 | 顶会文章解析

STFGNN(时空融合图神经网络)在交通流量预测中的优势主要体现在以下几个方面:首先,它提出了一种数据驱动的方法生成“时间图”,弥补了传统空间图可能无法反映的某些相关性。其次,STFGNN通过并行处理不同时间段的空间图和时间图,有效地学习隐藏的时空依赖关系。此外,它将融合图模块与门控卷积模块整合到一个统一层中,通过层层堆叠处理长序列,进一步增强了模型的表达能力。实验结果表明,STFGNN在多个交通数据集上表现出色,优于其他基准方法,展示了其在实际应用中的强大潜力。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 385

java实现下雪雪花飘落并堆积效果

在一个800*600的画布上实现雪花飘落并在下方堆积的一个效果。实现方案是画两层雪花,一层是飘落的,一层是在下方不动并堆积的。 演示效果(黄色的是月亮): 代码:import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Panel;public class Snow{

嘟嘟嘟嘟的叫 9296

YOLOv11 快速入门指南 | 10分钟吃透网络结构与新特性

2024 年 9 月 30 日,Ultralytics 发布了 YOLOv11,这是继 YOLOv8、v9、v10 之后的最新一代实时目标检测模型。 与前几代相比,YOLOv11 在保持“单阶段、实时、端到端”三大基因的同时,带来了两大核心升级:一句话总结:YOLOv11 = 更快 + 更准 + 更少参数。 2.2 微观单元:C3k2 与 C2PSA 2.2.1 C3k2 模块 作用:替换 YOLOv8 的 C2f,做跨阶段局部特征融合。 核心代码(ultralytics/nn/modules/block

shrgegrb的博客 1407

x-cmd install | snowmachine - 节日氛围神器,让你的终端下雪吧!

snowmachine 为你的终端带来一场冬日奇景吧!无论是想营造节日氛围,还是想放松心情,它都能满足你的需求。快来体验这款有趣又实用的终端美化工具吧!这是一个 Python 脚本,能让你的终端屏幕飘起雪花,瞬间变得生动有趣。厌倦了千篇一律的命令行界面?想给你的终端增添一丝趣味和节日气氛吗?选定软件后,按下回车键将展示一系列操作选项。

edwinjhlee的博客 417

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言学习

作者:王洋 链接:https://www.zhihu.com/question/19668080/answer/13050054 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 初学编程,费了偌大的劲,理解了这,理解了那,竟然只是在黑框下打印出了几个数字。 我觉得,初学一门编程语言一定要用合适的方式培养兴趣,黑框显然不是一个好方法。 所以,我建

IT菜鸟 464

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 实时绘制曲线-SetROP2方法
下一篇: 关于NTDLL.DLL 异常错误问题
海浪
博客等级 码龄20年 27粉丝 61原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值