mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-18 22:01:42 +08:00
50 lines
1.9 KiB
TypeScript
50 lines
1.9 KiB
TypeScript
import * as platform from "platform";
|
|
import * as common from "./image-asset-common";
|
|
|
|
global.moduleMerge(common, exports);
|
|
|
|
export class ImageAsset extends common.ImageAsset {
|
|
constructor(asset: string) {
|
|
super();
|
|
this.android = asset;
|
|
}
|
|
|
|
public getImageAsync(callback: (image, error) => void) {
|
|
let bitmapOptions = new android.graphics.BitmapFactory.Options();
|
|
bitmapOptions.inJustDecodeBounds = true;
|
|
let bitmap = android.graphics.BitmapFactory.decodeFile(this.android, bitmapOptions);
|
|
let sourceSize = {
|
|
width: bitmapOptions.outWidth,
|
|
height: bitmapOptions.outHeight
|
|
};
|
|
let requestedSize = common.getRequestedImageSize(sourceSize, this.options);
|
|
|
|
let sampleSize = calculateInSampleSize(bitmapOptions.outWidth, bitmapOptions.outHeight, requestedSize.width, requestedSize.height);
|
|
|
|
let finalBitmapOptions = new android.graphics.BitmapFactory.Options();
|
|
finalBitmapOptions.inSampleSize = sampleSize;
|
|
try {
|
|
bitmap = android.graphics.BitmapFactory.decodeFile(this.android, finalBitmapOptions);
|
|
callback(bitmap, null);
|
|
}
|
|
catch (ex) {
|
|
callback(null, ex);
|
|
}
|
|
}
|
|
}
|
|
|
|
var calculateInSampleSize = function (imageWidth, imageHeight, reqWidth, reqHeight) {
|
|
let sampleSize = 1;
|
|
let displayWidth = platform.screen.mainScreen.widthDIPs;
|
|
let displayHeigth = platform.screen.mainScreen.heightDIPs;
|
|
reqWidth = (reqWidth > 0 && reqWidth < displayWidth) ? reqWidth : displayWidth;
|
|
reqHeight = (reqHeight > 0 && reqHeight < displayHeigth) ? reqHeight : displayHeigth;
|
|
if (imageWidth > reqWidth && imageHeight > reqHeight) {
|
|
let halfWidth = imageWidth / 2;
|
|
let halfHeight = imageHeight / 2;
|
|
while ((halfWidth / sampleSize) > reqWidth && (halfHeight / sampleSize) > reqHeight) {
|
|
sampleSize *= 2;
|
|
}
|
|
}
|
|
return sampleSize;
|
|
} |