導航:首頁 > 操作系統 > androidsetmatrix

androidsetmatrix

發布時間:2025-08-14 21:53:00

android怎樣將canvas繪制的圖形保存到bitmap中

可以用Bitmap.compress函數來把Bitmap對象保存成PNG或JPG文件,然後可以用BitmapFactory把文件中的數據讀進來再生成Bitmap對象。
保存的代碼大概類似於這樣:
try {
FileOutputStream out = new FileOutputStream(filename);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
e.printStackTrace();
}
具體的可以去查Bitmap和BitmapFactory的幫助文檔。

❷ Android里怎麼動態設置按照一張圖片高度的百分比列來顯示

ImageView的LayoutParam都設置為wrap_content並設置 android:scaleType="matrix"代碼里創建MatrixMatrix matrix = new Matrix();Matrix matrix = new Matrix();matrix.postScale(0.5f, 1f);//寬縮小到50%,高度不變img.setImageMatrix(matrix);

❸ android Matrix.setRotate 鍜 postRotate鐨勫尯鍒

Matrix涓昏佺敤浜庡瑰鉤闈㈣繘琛屽鉤縐(Translate)錛岀緝鏀(Scale)錛屾棆杞(Rotate)浠ュ強鏂滃垏(Skew)鎿嶄綔銆
涓虹畝鍖栫煩闃靛彉鎹錛孉ndroid灝佽呬簡涓緋誨垪鏂規硶鏉ヨ繘琛岀煩闃靛彉鎹錛涘叾涓鍖呮嫭錛
set緋誨垪鏂規硶錛歴etTranslate錛宻etScale錛宻etRotate錛宻etSkew錛涜劇疆錛屼細瑕嗙洊涔嬪墠鐨勫弬鏁般
pre緋誨垪鏂規硶錛歱reTranslate錛宲reScale錛宲reRotate錛宲reSkew錛涚煩闃靛厛涔橈紝濡侻' = M * T(dx, dy)銆
post緋誨垪鏂規硶錛歱ostTranslate錛宲ostScale錛宲ostRotate錛宲ostSkew錛涚煩闃靛悗涔橈紝濡侻' = T(dx, dy) * M銆
閫氳繃灝嗗彉鎹㈢煩闃典笌鍘熷嬬煩闃電浉涔樻潵杈懼埌鍙樻崲鐨勭洰鐨勶紝渚嬪傦細
騫崇Щ錛坸'=x+tx錛泍'=y+ty錛夛細

緙╂斁錛坸'=sx*x錛泍'=sy*y錛夛細

鏃嬭漿錛坸'=cos尾*x-sin尾*y錛泍'=sin尾*x+cos尾*y錛夛細

閫夋嫨闇瑕佺敤鍒板備笅鐨勪笁瑙掑嚱鏁扮殑鍏寮忥細
鈶爏in(偽+尾)=sin偽cos尾+cos偽sin尾
鈶cos(偽+尾)=cos偽cos尾-sin偽sin尾
鍏寮忊憼鍙浠ョ敱鍗曚綅鍦嗘柟娉曟垨鎵樺嫆瀵嗗畾鐞嗘帹瀵煎嚭鏉ャ
鎺ㄥ艱繃紼嬪弬瑙侊細http://blog.sina.com.cn/s/blog_58260f420100c03j.html
鏂滃垏錛坸'=x+k1*y錛泍'=k2*x+y錛夛細

//婧愮爜鏂囦歡錛歟xternal\skia\legacy\src\core\SkMatrix.cpp

#define SK_Scalar1 (1.0f)
#define kMatrix22Elem SK_Scalar1
typedef float SkScalar;
#define SkScalarMul(a, b) ((float)(a) * (b))

enum {
kMScaleX, kMSkewX, kMTransX,
kMSkewY, kMScaleY, kMTransY,
kMPersp0, kMPersp1, kMPersp2
};

void SkMatrix::reset() {
fMat[kMScaleX] = fMat[kMScaleY] = SK_Scalar1; //鍏跺間負1
fMat[kMSkewX] = fMat[kMSkewY] =
fMat[kMTransX] = fMat[kMTransY] =
fMat[kMPersp0] = fMat[kMPersp1] = 0; //鍏跺礆紝鍏ㄤ負0
fMat[kMPersp2] = kMatrix22Elem; //鍏跺間負1
this->setTypeMask(kIdentity_Mask | kRectStaysRect_Mask);
}

void SkMatrix::setTranslate(SkScalar dx, SkScalar dy) {
if (SkScalarToCompareType(dx) || SkScalarToCompareType(dy)) {
fMat[kMTransX] = dx; //浠ユ柊鍊糳x瑕嗙洊鍘熷礆紝鍘熷兼棤鏁堜簡
fMat[kMTransY] = dy;

fMat[kMScaleX] = fMat[kMScaleY] = SK_Scalar1; //鍏跺間負1
fMat[kMSkewX] = fMat[kMSkewY] =
fMat[kMPersp0] = fMat[kMPersp1] = 0; //鍏跺礆紝鍏ㄤ負0
fMat[kMPersp2] = kMatrix22Elem; //鍏跺間負1

this->setTypeMask(kTranslate_Mask | kRectStaysRect_Mask);
} else {
this->reset();
}
}

bool SkMatrix::preTranslate(SkScalar dx, SkScalar dy) {
if (this->hasPerspective()) {
SkMatrix m;
m.setTranslate(dx, dy);
return this->preConcat(m); //鐭╅樀鐨勫厛涔樿繍綆
}

if (SkScalarToCompareType(dx) || SkScalarToCompareType(dy)) {
fMat[kMTransX] += SkScalarMul(fMat[kMScaleX], dx) +
SkScalarMul(fMat[kMSkewX], dy); //鍏堜箻錛岄渶瑕佺煩闃佃繍綆楄繃
fMat[kMTransY] += SkScalarMul(fMat[kMSkewY], dx) +
SkScalarMul(fMat[kMScaleY], dy);

this->setTypeMask(kUnknown_Mask | kOnlyPerspectiveValid_Mask);
}
return true;
}

bool SkMatrix::postTranslate(SkScalar dx, SkScalar dy) {
if (this->hasPerspective()) {
SkMatrix m;
m.setTranslate(dx, dy);
return this->postConcat(m); //鐭╅樀鐨勫悗涔樿繍綆
}

if (SkScalarToCompareType(dx) || SkScalarToCompareType(dy)) {
fMat[kMTransX] += dx; //鍚庝箻錛岀洿鎺ュ姞鏂板糳x鍗沖彲
fMat[kMTransY] += dy;
this->setTypeMask(kUnknown_Mask | kOnlyPerspectiveValid_Mask);
}
return true;
}

bool SkMatrix::preConcat(

閱讀全文

與androidsetmatrix相關的資料

熱點內容
木梯樓梯扶手加密加高怎麼弄 瀏覽:130
為什麼安卓內部設置比蘋果亂 瀏覽:811
智能垃圾壓縮站 瀏覽:579
arduino單片機怎樣使用內部晶振 瀏覽:845
菜鳥點我達app出賬中什麼意思 瀏覽:837
復試離散數學和編譯原理 瀏覽:602
什麼app是三角圖 瀏覽:471
編譯一個程序要求老師 瀏覽:231
java請求https證書 瀏覽:601
編譯合法的是 瀏覽:561
加密過的u盤視頻能不能電腦錄屏 瀏覽:575
麻將解壓器價格 瀏覽:619
linuxc編程實戰pdf 瀏覽:470
程序員懷孕的一年怎麼提升自己 瀏覽:898
c代碼工程中的編譯構建腳本 瀏覽:181
反編譯apk修改 瀏覽:488
找程序員當老公 瀏覽:905
androidsetmatrix 瀏覽:178
龍王的命令 瀏覽:455
戰馬pdf 瀏覽:722