演算法點陣
A. 點陣圖與矢量圖的區別有哪些
1、 矢量圖
矢量圖又叫向量圖,是用一系列計算機指令來描述和記錄一幅圖,一幅圖可以解為一系列由點、線、面等到組成的子圖,它所記錄的是對象的幾何形狀、線條粗細和色彩等。生成的矢量圖文件存儲量很小,特別適用於文字設計、圖案設計、版式設計、標志設計、計算機輔助設計(CAD)、工藝美術設計、插圖等。
矢量圖只能表示有規律的線條組成的圖形,如工程圖、三維造型或藝術字等;對於由無規律的像素點組成的圖像(風景、人物、山水),難以用數學形式表達,不宜使用矢量圖格式;其次矢量圖不容易製作色彩豐富的圖像,繪制的圖像不很真實,並且在不同的軟體之間交換數據也不太方便。
另外,矢量圖像無法通過掃描獲得,它們主要是依靠設計軟體生成。矢量繪圖程序定義(像數學計算)角度、圓弧、面積以及與紙張相對的空間方向,包含賦予填充和輪特徵性的線框。常見的矢量圖處理軟體有CoreIDRAW、AutoCAD、Illustrator和FreeHand等。
2、點陣圖
點陣圖又叫點陣圖或像素圖,計算機屏幕上的圖你是由屏幕上的發光點(即像素)構成的,每個點用二進制數據來描述其顏色與亮度等信息,這些點是離散的,類似於點陣。多個像素的色彩組合就形成了圖像,稱之為點陣圖。
點陣圖在放大到一定限度時會發現它是由一個個小方格組成的,這些小方格被稱為像素點,一個像素是圖像中最小的圖像元素。在處理點陣圖圖像時,所編輯的是像素而不是對象或形狀,它的大小和質量取決於圖像中的像素點的多少,每平方英寸中所含像素越多,圖像越清晰,顏色之間的混和也越平滑。計算機存儲點陣圖像實際上是存儲圖像的各個像素的位置和顏色數據等到信息,所以圖像越清晰,像素越多,相應的存儲容量也越大。
點陣圖圖像與矢量圖像相比更容易模仿照片似的真實效果。點陣圖圖像的主要優點在於表現力強、細膩、層次多、細節多,可以十分容易的模擬出像照片一樣的真實效果。由於是對圖像中的像素進行編輯,所以在對圖像進行拉伸、放大或縮小等到處理時,其清晰度和光滑度會受到影響。點陣圖圖像可以通過數字相機、掃描或PhotoCD獲得,也可以通過其他設計軟體生成
點陣圖圖像,也稱點陣圖像或繪制圖像,是由稱作像素的單個點組成的。當放大點陣圖時,可以看見構成圖像的單個圖片元素。擴大點陣圖尺寸就是增大單個像素,會使線條和形狀顯得參差不齊。但是如果從稍遠一點
的位置觀看,點陣圖圖像的顏色和形狀又是連續的,這就是點陣圖的特點。矢量圖像,也稱繪圖圖像,在數學上定義為一系列點與點之間的關系,矢量圖可以任意放大或縮小而不會出現圖像失真現象
B. 8*8點陣 是什麼
點陣圖類型
點陣圖是位元陣列,指定矩形陣列 (Rectangular Array) 像素中的每個像素色彩。個別像素的組成位元數將決定指派給該像素的色彩數目。例如,如果每個像素都是由 4 個位元組成,則可將指定像素指派給 16 個不同的色彩之一 (2^4 = 16)。下表將顯示一些範例,說明可指派給由指定位元數所表示的像素的色彩數目。
每像素位元數 可指派給像素的色彩數目
1
2^1 = 2
2
2^2 = 4
4
2^4 = 16
8
2^8 = 256
16
2^16 = 65,536
24
2^24 = 16,777,216
儲存點陣圖的磁片檔案通常都會包含一或多個資訊區塊,其中存放每像素位元數目、每列的像素數目和陣列的資料列數目等資訊。此類檔案可能也會包含色彩表 (又稱為色板)。色表會將點陣圖的數目對應為特定色彩。下列圖示顯示一個放大的影像及其點陣圖和色表。每個像素都是由 4 位元數字來表示,因此色表中共有 2^4 = 16 個色彩。表格中的每一個色彩都是用 24 位元數字來表示:8 位元用來表示紅色、8 位元用來表示綠色,還有 8 位元用來表示藍色。這些數字是以十六進位 (以 16 為基底) 格式顯示:A = 10、B = 11、C = 12、D = 13、E = 14、F = 15。
請看影像的第 3 列及第 5 欄的像素。點陣圖中對應的數字為 1。我們可由色表得知 1 代表紅色,因此該像素為紅色。點陣圖頂端列的所有項目都是 3。我們可由色表得知 3 表示藍色,因此影像頂端列的所有像素都是藍色。
注意事項
有些點陣圖是以由下到上的格式儲存;點陣圖首列的數目會對應到影像底端列的像素。
將索引儲存至色彩表的點陣圖稱為色板索引點陣圖。有些點陣圖並不需要色表。例如,如果點陣圖使用每像素 24 位元,則該點陣圖可儲存色彩本身,而非存入色表的索引。下圖顯示直接儲存色彩的點陣圖 (每像素 24 位元),而不是使用色表。該圖同時顯示對應影像的放大檢視畫面。在點陣圖中,FFFFFF 表示白色、FF0000 代表紅色、00FF00 為綠色,而 0000FF 則為藍色。
圖形檔案格式
您可以使用許多標准格式將點陣圖儲存在磁片檔案中。GDI+ 支援以下各節說明的圖形檔案格式。
BMP
BMP 是 Windows 用來儲存與裝置無關 (Device-Independent) 和與應用程式無關的影像的標准格式。指定 BMP 檔的每像素位元數 (1、4、8、15、24、32 或 64) 是由檔案標頭所決定。常見的 BMP 檔為每像素 24 位元。通常 BMP 檔不會被壓縮,因此並不適合透過網際網路傳輸。
Graphics Interchange Format (GIF)
GIF 是 Web 網頁上常見的影像格式。GIF 適用於線條圖形、具有實色區塊的圖片和色彩之間具有明顯界線的圖片。GIF 可被壓縮而且不會在壓縮過程中遺失任何資訊;解壓縮後的影像將和原始影像完全相同。GIF 的色彩可指定為透明,這樣一來影像則可以顯示該影像的 Web 網頁做為背景色彩。GIF 影像的序列 (Sequence) 可儲存在單一檔案中,做為動畫 GIF。GIF 大部分都儲存為每像素 8 位元,這樣便可將它們限制在 256 色彩。
Joint Photographic Experts Group (JPEG)
JPEG 是一種壓縮結構,適用於自然景觀圖片,例如掃描的照片。有些資訊可能會在壓縮過程中喪失,但肉眼並無法看出變化。JPEG 可儲存每像素 24 位元,因此它們可以顯示超過 1 千 6 百萬個色彩。JPEG 不支援透明效果或動畫。
您可以設定 JPEG 影像檔的壓縮層次,但壓縮層次越高 (檔案越小),便會喪失較多資訊。通常肉眼無法辨識以 20:1 的壓縮比率所產生的影像和原始檔案之間的差異。下圖將顯示 BMP 影像和兩個從該 BMP 影像壓縮而來的 JPEG 影像。第一個 JPEG 的壓縮比率為 4:1,第二個 JPEG 的壓縮比率約為 8:1。
JPEG 壓縮不適用於線條圖形、實色區塊和明顯的界線。下圖將顯示一個 BMP 和兩個 JPEG 及一個 GIF。這兩個 JPEG 和 GIF 都是從 BMP 壓縮而來的。GIF 的壓縮比率為 4:1、較小的 JPEG 為 4:1,較大的 JPEG 為 8:3。請注意,GIF 中的線條旁仍然出現明顯界線,但 JPEG 中的界線似乎比較模糊。
JPEG 是一種壓縮結構,而非檔案格式。JPEG 檔案交換格式 (JFIF) 是常用來儲存和傳送影像的檔案格式,它們是根據 JPEG 結構進行壓縮。Web 瀏覽器顯示的 JFIF 檔案將使用 .jpg 副檔名。
Exchangeable Image File (EXIF)
EXIF 是用於數位相機所擷取的相片檔案格式。EXIF 檔含有根據 JPEG 規格來壓縮的影像。EXIF 檔同時含有照片資訊 (拍攝日期、快門速度、曝光時間等資訊) 和相機資訊 (製造商、型號等資訊)。
Portable Network Graphics (PNG)
PNG 格式保留了許多 GIF 格式的優點,同時提供比 GIF 更強大的功能。PNG 檔和 GIF 檔同樣都不會在壓縮過程中喪失任何資訊。PNG 檔可儲存每像素 8、24 或 48 位元的色彩,以及每像素 1、2、4、8 或 16 位元的灰階。相較之下,GIF 檔只能使用每像素 1、2、4 或 8 位元。PNG 檔也可儲存每個像素的 Alpha 值,指定該像素與背景色彩混用的程度。
PNG 改進了 GIF 漸進式顯示影像的功能;當 PNG 收到透過網路連線傳送的影像時,可以顯示較佳的影像效果。PNG 檔可包含 Gamma 修正和色彩修正資訊,這樣一來可將影像正確地對應到各種不同的顯示裝置。
Tag Image File Format (TIFF)
TIFF 是一種具有彈性且可延伸的格式,各種平台和影像處理應用程式都支援這種格式。TIFF 檔可儲存每像素任意位元數的影像,並可使用各種壓縮演演算法。單一、多頁的 TIFF 檔可儲存數個影像。影像相關資訊 (掃描器製作、主機電腦、壓縮類型、方向、每像素範例等等) 可儲存在檔案中,並可使用標記進行排列。TIFF 格式可依需要 (如情況允許而且必須增加新的標記) 進行延伸
C. 哪位高手能給我解釋解釋單片機點陣掃描原理不謝謝
談LED點陣的掃描原理,只要一看LED點陣的原理圖就一目瞭然了,如下圖:
圖中,A--H可以看做行,1--7看做列;假如我們給點陣送人一個列數據0x80(1000 0000),並且同時送人一個行數據0x7f(0111 1111),此時我們就點亮了這個點陣左上角的那顆LED發光管,如果我們不停的行數據:0111 1111;1011 1111;1101 1111;1110 1111;1111 0111;1111 1011;1111 1101;1111 1110,這8個數據周而復始的送人點陣就是行掃描的過程,這個過程一般採用74HC138等解碼器來完成,而在對應的行數據送人的同時也送人1--7的列數據,例如:
行=0111 1111,列=1000 0000
行=1011 1111,列=0100 0000
行=1101 1111,列=1010 0000
行=1110 1111,列=1001 0000
行=1111 0111,列=1000 1000
行=1111 1011,列=1000 0100
行=1111 1101,列=1000 0010
行=1111 1110,列=1000 0001
此時程序循環執行的結果會在點陣屏上顯示左上至右下的對角斜線。
仔細想想應該不難理解。
在代碼編寫上,實現上述功能有很多方法,最長用的就是for循環,如果你網路資料會發現,大凡點陣顯示代碼中都會在顯示函數中引用for循環,而且根據點陣數的不同會有:
for(i=0;i<8;i++)或for(i=0;i<16;i++)或for(i=0;i<32;i++)這就是對於8行、16行、32行點陣的掃描演算法。
就說到這里吧,更多的知識請網路搜索吧。
D. 啥叫點陣,字形碼信息
點陣就是電腦顯示文字的方法
文字以點陣的方式展現在屏幕上
一是一個一個點排列組合成了你面前的漢字
演算法:
點陣32X32,就是屏幕32乘方的像素點,1個點用1bit,8bit為1Byte
一行就是32/8,要4Byte,再乘32行,再乘100
必要的話,再除1024,折算成KB.
E. 求助8X8點陣流水燈用三種演算法實現變換
DATA SEGMENT MY8255_A EQU 2A0 ;8255的A口地址 MY8255_B EQU 2A1 ;8255的B口地址 MY8255_C EQU 2A2 ;8255的C口地址 MY8255_MODE EQU 2A3 ;8255的控制寄存器地址 MODE_A DB 10010000B ;控制字 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AL,MODE_A MOV DX,MY8255_MODE OUT DX,AL MOV AL, 00000001B CONT: MOV DX,MY8255_A OUT DX, AL CALL DELAY` ROL AL,1 JMP CONT MOV AH,41H INT 21H DELAY PROC PUSH BX PUSH CX MOV BL,10 NEXT: MOV CX,2801 WAIT: LOOP WAIT DEC BL JNZ NEXT POP CX POP BX RET DELAY ENDP CODE ENDS END START
F. 什麼是點陣圖(CDR中)
就是點陣圖,PS製作出來的那種
一般來說點陣圖和點陣圖是一個概念。它是由n多的像素組成的。
它的概念主要是相對於區別矢量圖而言的。點陣圖和矢量圖是現代計算機平面圖形的兩大概念。
-----------------------以下解釋可以作為參考:
點陣圖[bitmap],也叫做點陣圖,刪格圖象,像素圖,簡單的說,就是最小單位由象素構成的圖,縮放會失真。構成點陣圖的最小單位是象素,點陣圖就是由象素陣列的排列來實現其顯示效果的,每個象素有自己的顏色信息,在對點陣圖圖像進行編輯操作的時候,可操作的對象是每個象素,我們可以改變圖像的色相、飽和度、明度,從而改變圖像的顯示效果。舉個例子來說,點陣圖圖像就好比在巨大的沙盤上畫好的畫,當你從遠處看的時候,畫面細膩多彩,但是當你靠的非常近的時候,你就能看到組成畫面的每粒沙子以及每個沙粒單純的不可變化顏色。
矢量圖[vector],也叫做向量圖,簡單的說,就是縮放不失真的圖像格式。矢量圖是通過多個對象的組合生成的,對其中的每一個對象的紀錄方式,都是以數學函數來實現的,也就是說,矢量圖實際上並不是象點陣圖那樣紀錄畫面上每一點的信息,而是紀錄了元素形狀及顏色的演算法,當你打開一付矢量圖的時候,軟體對圖形象對應的函數進行運算,將運算結果[圖形的形狀和顏色]顯示給你看。無論顯示畫面是大還是小,畫面上的對象對應的演算法是不變的,所以,即使對畫面進行倍數相當大的縮放,其顯示效果仍然相同[不失真]。舉例來說,矢量圖就好比畫在質量非常好的橡膠膜上的圖,不管對橡膠膜怎樣的常寬等比成倍拉伸,畫面依然清晰,不管你離得多麼近去看,也不會看到圖形的最小單位。
G. 1616點陣怎樣實現漢字上下左右移動移動的演算法核心思想是什麼謝謝大神們
先顯示出一個用32個位元組數組表示字模的字元,根據你的字模排列順序,你在紙上畫一下,順序左移時,每一步,每一個方向自動時,前後字模數據的變化規律,然後按照規律設計程序,實現每一步平移的字模。
H. LED點陣問題!做過點陣顯示的高手進!
你好,我的畢業設計是16*16的點陣顯示+光筆手寫。單片機是AT89S52,也是74154加8550三極體做行驅動,74595做列線驅動,3UD33光敏三極體做感應筆。
先說說我做的工作方式:用動態掃描的方式,即一行行的顯示、掃描。主程序中除了初始化程序,就是循環了,循環程序中就只有顯示程序,掃描是用定時中斷,不知道你有沒有用到定時掃描,其實我這里的掃描和顯示子程序的原理都是一樣的,只是用到的數據不同,顯示是從編輯好的字型檔中調用,而掃描就是逐個點亮,用到的數據比較固定(因為我這里要確定屏幕上具體的位置,所以要逐個點亮,進行整屏掃描,人眼看起來是沒有任何顯示的)。
因為我的主程序中就只有顯示程序(估計就是你所說的掃描),所以,我認為這樣已經是單片機的最高頻率了,具體的頻率是多少因為用C語言編寫的,所以沒有具體的數據,實際調試中顯示是非常穩定的。
是不是可以這樣來計算,顯示的頻率大於50Hz,肉眼看起來就是完整而穩定的畫面了。你要做16*64的應該是16行64列對吧,這里的顯示就應該是逐行的顯示,16行都顯示完就是一個周期,(應該確切的說是從第一行顯示開始到下一次的第一行顯示為止,因為你的程序中可能還有其他的程序要處理,如果和我的一樣主程序就只有顯示那就是16行都顯示完就是一個周期)那麼這個周期就應該不超過20ms(20ms對應50Hz),所以每一行顯示的時間就不能超過20ms/16=1.25ms,那麼你在編寫程序中,行顯示的子程序執行一次的時間就不能超過1.25ms。
我的行顯示的子程序:
/********************************************************************/
/********************************************************************/
sbit da=P2^0;
sbit sh=P2^2;
sbit st=P2^1;
unsigned char hang_disp_number=16; /***16列****/
/********************************************************************/
void hang_disp(unsigned char temp1,unsigned char temp2)
/********************************************************************/
/********************************************************************/
{
unsigned char i;
for(i=0;i<hang_disp_number;i++)
{
if(i==8)temp2=temp1; /********/
{
if(temp2&0x01)da=1;
else da=0;
}
sh=0;sh=1;sh=0; /****模擬串口的時鍾****/
temp2=temp2>>1; /****模擬串口的位******/
}
st=0;st=1;st=0; /*****並行輸出使能*****/
}
/********************************************************************/
/********************************************************************/
你可以修改成:
/********************************************************************/
/********************************************************************/
sbit da=P2^0;
sbit sh=P2^2;
sbit st=P2^1;
unsigned char hang_disp_number=64;
/********************************************************************/
void hang_disp(unsigned char temp1,unsigned char temp2,unsigned char temp3,unsigned char temp4,unsigned char temp5,unsigned char temp6,unsigned char temp7,unsigned char temp8)
/********************************************************************/
/********************************************************************/
{
unsigned char i;
for(i=0;i<hang_disp_number;i++)
{
if(i==8)temp8=temp7; /********/
if(i==16)temp8=temp6;
if(i==24)temp8=temp5;
if(i==32)temp8=temp4;
if(i==40)temp8=temp3;
if(i==48)temp8=temp2;
if(i==56)temp8=temp1;
{
if(temp8&0x01)da=1;
else da=0;
}
sh=0;sh=1;sh=0;
temp8=temp8>>1;
}
st=0;st=1;st=0; /****並行輸出使能****/
}
/********************************************************************/
/********************************************************************/
如果要用到定時器,可以比較准確的確定掃描的頻率,而如果把掃描程序放到主程序中,就要和其他的程序好好的分配一下了。
74154和74595到底能擴展多少塊點陣這個我也沒有試過,如果真要算,我感覺還是根據行掃描不能超過1.25ms,你可以准確的測量你的行顯示子程序中傳出「一位」數據(即一個循環)的時間t,這里的「一位」就是當前行中的某一列對應的數據,64列就要傳出64位。那麼最多的列數就是n=1.25/t(這里的1.25也不是固定的,應該看你的具體情況,這里的1.25是按照主程序只有掃描顯示來計算的)。
有說的不對的地方,還望多多指教。。。。。。
I. 哪位大俠能告訴我一下點陣字模向左旋轉90度的演算法。
用數組,將數據轉換就可以了。