如何在 HarmonyOS 中从资源设置 PixelMap?
How to set up a PixelMap from resource in HarmonyOS?
在 Android 中,我们可以使用 BitmapFactory:
为资源 image/drawable 创建位图
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);
在HarmonyOS中如何根据资源id创建对应的PixelMap?
欢迎来到社区!
我们可以通过以下方法从资源中获取PixelMap。
import ohos.app.Context;
import ohos.global.resource.NotExistException;
import ohos.global.resource.RawFileEntry;
import ohos.global.resource.Resource;
import ohos.global.resource.ResourceManager;
import ohos.global.resource.WrongTypeException;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.image.ImageSource;
import ohos.media.image.PixelMap;
import java.io.IOException;
import java.util.Optional;
/**
* Resources Utility
*/
public class ResUtil {
private static final String LABEL = "ResUtil";
private static final String MESSAGE = "IOException | NotExistException | WrongTypeException";
private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 123401234, "ResUtil");
private ResUtil() {
}
/**
* get the path from id.
*
* @param context the context
* @param id the id
* @return the path from id
*/
public static String getPathById(Context context, int id) {
String path = "";
if (context == null) {
return path;
}
ResourceManager manager = context.getResourceManager();
if (manager == null) {
return path;
}
try {
path = manager.getMediaPath(id);
} catch (IOException | NotExistException | WrongTypeException e) {
HiLog.error(LABEL_LOG, "%{public}s: %{public}s", new Object[]{"getPathById", MESSAGE});
}
return path;
}
/**
* check if the input string is empty.
*
* @param input string
* @return boolean value
*/
public static boolean isEmpty(String input) {
return input == null || input.length() == 0;
}
/**
* get the pixel map.
*
* @param context the context
* @param id resource id
* @return the pixel map
*/
public static Optional<PixelMap> getPixelMap(Context context, int id) {
String path = getPathById(context, id);
if (context == null || isEmpty(path)) {
return Optional.empty();
}
RawFileEntry assetManager = context.getResourceManager().getRawFileEntry(path);
ImageSource.SourceOptions options = new ImageSource.SourceOptions();
options.formatHint = "image/png";
ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();
try {
Resource asset = assetManager.openRawFile();
ImageSource source = ImageSource.create(asset, options);
return Optional.ofNullable(source.createPixelmap(decodingOptions));
} catch (IOException e) {
HiLog.error(LABEL_LOG, "%{public}s: %{public}s", new Object[]{"getPixelMap", "IOException"});
}
return Optional.empty();
}
}
也许你可以试试下面的代码:
try {
Resource resource = getResourceManager().getResource(ResourceTable.Media_icon);
PixelMapElement pixelMapElement = new PixelMapElement(resource);
PixelMap pixelMap = pixelMapElement.getPixelMap();
} catch (IOException e) {
e.printStackTrace();
} catch (NotExistException e) {
e.printStackTrace();
}
在 Android 中,我们可以使用 BitmapFactory:
为资源 image/drawable 创建位图Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);
在HarmonyOS中如何根据资源id创建对应的PixelMap?
欢迎来到社区!
我们可以通过以下方法从资源中获取PixelMap。
import ohos.app.Context;
import ohos.global.resource.NotExistException;
import ohos.global.resource.RawFileEntry;
import ohos.global.resource.Resource;
import ohos.global.resource.ResourceManager;
import ohos.global.resource.WrongTypeException;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.image.ImageSource;
import ohos.media.image.PixelMap;
import java.io.IOException;
import java.util.Optional;
/**
* Resources Utility
*/
public class ResUtil {
private static final String LABEL = "ResUtil";
private static final String MESSAGE = "IOException | NotExistException | WrongTypeException";
private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 123401234, "ResUtil");
private ResUtil() {
}
/**
* get the path from id.
*
* @param context the context
* @param id the id
* @return the path from id
*/
public static String getPathById(Context context, int id) {
String path = "";
if (context == null) {
return path;
}
ResourceManager manager = context.getResourceManager();
if (manager == null) {
return path;
}
try {
path = manager.getMediaPath(id);
} catch (IOException | NotExistException | WrongTypeException e) {
HiLog.error(LABEL_LOG, "%{public}s: %{public}s", new Object[]{"getPathById", MESSAGE});
}
return path;
}
/**
* check if the input string is empty.
*
* @param input string
* @return boolean value
*/
public static boolean isEmpty(String input) {
return input == null || input.length() == 0;
}
/**
* get the pixel map.
*
* @param context the context
* @param id resource id
* @return the pixel map
*/
public static Optional<PixelMap> getPixelMap(Context context, int id) {
String path = getPathById(context, id);
if (context == null || isEmpty(path)) {
return Optional.empty();
}
RawFileEntry assetManager = context.getResourceManager().getRawFileEntry(path);
ImageSource.SourceOptions options = new ImageSource.SourceOptions();
options.formatHint = "image/png";
ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();
try {
Resource asset = assetManager.openRawFile();
ImageSource source = ImageSource.create(asset, options);
return Optional.ofNullable(source.createPixelmap(decodingOptions));
} catch (IOException e) {
HiLog.error(LABEL_LOG, "%{public}s: %{public}s", new Object[]{"getPixelMap", "IOException"});
}
return Optional.empty();
}
}
也许你可以试试下面的代码:
try {
Resource resource = getResourceManager().getResource(ResourceTable.Media_icon);
PixelMapElement pixelMapElement = new PixelMapElement(resource);
PixelMap pixelMap = pixelMapElement.getPixelMap();
} catch (IOException e) {
e.printStackTrace();
} catch (NotExistException e) {
e.printStackTrace();
}