导航:首页 > 操作系统 > 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相关的资料

热点内容
pdf英文阅读器 浏览:86
如何将多台服务器组合起来 浏览:235
木梯楼梯扶手加密加高怎么弄 浏览:130
为什么安卓内部设置比苹果乱 浏览:811
智能垃圾压缩站 浏览:579
arduino单片机怎样使用内部晶振 浏览:845
菜鸟点我达app出账中什么意思 浏览:837
复试离散数学和编译原理 浏览:602
什么app是三角图 浏览:471
编译一个程序要求老师 浏览:231
java请求https证书 浏览:601
编译合法的是 浏览:561
加密过的u盘视频能不能电脑录屏 浏览:576
麻将解压器价格 浏览:619
linuxc编程实战pdf 浏览:470
程序员怀孕的一年怎么提升自己 浏览:898
c代码工程中的编译构建脚本 浏览:181
反编译apk修改 浏览:489
找程序员当老公 浏览:907
androidsetmatrix 浏览:179