Matlab實現(xiàn)鼠標光標變成愛心和瞄準鏡形狀_第1頁
Matlab實現(xiàn)鼠標光標變成愛心和瞄準鏡形狀_第2頁
Matlab實現(xiàn)鼠標光標變成愛心和瞄準鏡形狀_第3頁
Matlab實現(xiàn)鼠標光標變成愛心和瞄準鏡形狀_第4頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第Matlab實現(xiàn)鼠標光標變成愛心和瞄準鏡形狀plot([0,pointerSize]+.5,[1,1].*(1+pointerSize)./2,'LineWidth',1.5,'Color',[0,0,0,.5]);

plot([1,1].*(1+pointerSize)./2,[0,pointerSize]+.5,'LineWidth',1.5,'Color',[0,0,0,.5]);

rcross=plot(8,8,'rx','LineWidth',2,'MarkerSize',14);

bshandle=scatter([],[],200,'s','filled','CData',[0,0,0]);

gshandle=scatter([],[],200,'s','filled','CData',[.8,.8,.8]);

pointer=zeros(pointerSize).*nan;

set(gcf,'KeyPressFcn',@keyPressFcn)

function

keyPressFcn(~,event)

switch

event.Key

case

'uparrow',rcross.YData=rcross.YData+1;

case

'downarrow',rcross.YData=rcross.YData-1;

case

'leftarrow',rcross.XData=rcross.XData-1;

case

'rightarrow',rcross.XData=rcross.XData+1;

case

'1'

pointer(pointerSize+1-rcross.YData,rcross.XData)=1;

case

'2'

pointer(pointerSize+1-rcross.YData,rcross.XData)=2;

case

'n'

pointer(pointerSize+1-rcross.YData,rcross.XData)=nan;

case

's'

timestr=char(datetime('now'));

timestr(timestr=='

')='_';

timestr(timestr==':')='_';

nowStr=timestr;

save([nowStr,'.mat'],'pointer','-mat');

end

[brow,bcol]=find(pointer==1);

bshandle.XData=bcol;

bshandle.YData=pointerSize+1-brow;

[grow,gcol]=find(pointer==2);

gshandle.XData=gcol;

gshandle.YData=pointerSize+1-grow;

rcross.XData=mod(rcross.XData+pointerSize-1,pointerSize)+1;

rcross.YData=mod(rcross.YData+pointerSize-1,pointerSize)+1;

end

mat文件的調(diào)用

p=load('heart.mat');

set(gcf,'Pointer','Custom','PointerShapeCData',p.pointer,'PointerShapeHotSpot',[16,16]);

PNG圖片轉(zhuǎn)換為光標矩陣

我們只要將圖片二值化,將圖片和圖片透明度表大小都調(diào)為32x32或者16x16,然后白色部分設(shè)置成2,黑色部分設(shè)置成1,透明度矩陣0值處設(shè)置為nan即可,代碼如下:

[img,~,alpha]=imread('1.png');

pointerSize=32;

img=imresize(img,[pointerSize,pointerSize]);

if

size(img,3)1

img=rgb2gray(img);

pointer=imbinarize(img)+1;

alpha=imresize(alpha,[pointerSize,pointerSize]);

pointer(alpha==0)=nan;

為了更方便設(shè)置光標,我將此部分封裝為了一個函數(shù),只要輸入圖片或者上一部分創(chuàng)建mat文件的路徑、鼠標作用點位置,即可更改當前figure窗口的光標:

function

setPointer(path,HotSpot,pointerSize)

%path:

png圖片,mat文件位置,或32x32,16x16double數(shù)組

%HotSpot:光標作用點

%pointerSize光標大小,僅path為png圖片路徑時需要設(shè)置

if

nargin3

pointerSize=32;

if

size(path,1)==1

type=path(end-2:end);

if

strcmp(type,'mat')

data=load(path);

P=data.pointer;

else

[img,~,alpha]=imread(path);

img=imresize(img,[pointerSize,pointerSize]);

if

size(img,3)1

img=rgb2gray(img);

end

pointer=imbinarize(img)+1;

alpha=imresize(alpha,[pointerSize,pointerSize]);

pointer(alpha==0)=nan;

P=pointer;

end

P=path;

set(gcf,'Pointer','Custom','PointerShapeCData',P,'PointerShapeHotSpot',HotSpot);

path:png圖片,mat文件位置,或32x32,16x16double數(shù)組HotSpot:光標作用點pointerSize光標大?。簝Hpath為png圖片路徑時需要設(shè)置

程序調(diào)用:對于以下名為test.png的文件

以及自己畫的一個ban.mat文件,可以通過以下方式調(diào)用:

setPoint

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論