線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3148
推到 Plurk!
推到 Facebook!

請問一下資料型態轉換的問題

答題得分者是:arisaka_matsuri
amadeus2
一般會員


發表:4
回覆:2
積分:1
註冊:2007-12-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-26 23:11:54 IP:163.23.xxx.xxx 訂閱
大家好!!!

我自已目前正在進行一些程式連結的問題(MATLAB與BCB)

最主要處理一些影像相關的資訊
現在最大的問題是圖案讓MATLAB處理完後用memcpy的方式
目前只能得到一個 A[ col] [row ] 的double型態矩陣

裡面存0~255不等的資料,灰階、二值就存1個,彩色圖片就存3個,分別存RGB資訊
等等我要將這些矩陣還原成圖

問題在於
0~255只有佔8Bits的空間,應該用Byte
請問要如何把一個double的矩陣變成Byte型式的矩陣呢

是用
[code cpp]
Byte B= A;
[/code]
然後使用for去填回嗎?

還是使用Scanline時,使用double型態的矩陣也可以呢?


謝謝!感激不盡!!
------
程式gogogo
amadeus2
一般會員


發表:4
回覆:2
積分:1
註冊:2007-12-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-27 01:27:46 IP:163.23.xxx.xxx 訂閱
我試著用強制轉換,也就是使用運算轉換的方式
設定一個char型態的資料變數與矩陣元素相乘,讓相乘的元素全變為char型式,不知道可不可以


[code cpp]
double A[2][2]={{1,2},{3,4}};
char B[2][2];

unsigned char CharData=1 ; //設定一個a的變數
char dd=2 ; //做為最後比較用變數

B[0][0]=A[0][0]*CharData; //每個矩陣元素都強制轉換成char
B[1][0]=A[1][0]*CharData;
B[0][1]=A[0][1]*CharData;
B[1][1]=A[1][1]*CharData;

int c=sizeof(B[1][1]); //這邊中斷顯示1
int cc=sizeof(dd); //這邊中斷也顯示1代表1bytes
int ccc=sizeof(A[1] [1] );
[/code]


以上我從BCB設中斷點在最後面,發現整個B的資料跳出來是{{1,2},{3,4}}

我想請問一下,這樣算是成功了嗎?
------
程式gogogo
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-27 11:20:45 IP:218.166.xxx.xxx 訂閱
資料型態轉換(type cast)是個蠻基本的問題
當你寫
BYTE B = A;
時,就暗指由編譯器幫你把A的值強迫轉型(type coercion)為BYTE
A後面乘上一個BYTE型態的數值是沒有任何轉型幫助的
這涉及到轉型的型別優先順序
假設A是個double的型別
那編譯器會先把A後面乘上的BYTE型別轉為double
再跟A相乘

如果不想在c裡面轉型,MATLAB也有提供轉型
請參考MATLAB的說明文件
系統時間:2024-04-25 17:49:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!