ImageDecoder 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
類別,用於將編碼影像 (例如PNG
、、JPEG
、 WEBP
GIF
或 HEIF
) 轉換成 Drawable
或 Bitmap
物件。
[Android.Runtime.Register("android/graphics/ImageDecoder", ApiSince=28, DoNotGenerateAcw=true)]
public sealed class ImageDecoder : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IAutoCloseable
[<Android.Runtime.Register("android/graphics/ImageDecoder", ApiSince=28, DoNotGenerateAcw=true)>]
type ImageDecoder = class
inherit Object
interface IAutoCloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 繼承
- 屬性
- 實作
備註
類別,用於將編碼影像 (例如PNG
、、JPEG
、 WEBP
GIF
或 HEIF
) 轉換成 Drawable
或 Bitmap
物件。
若要使用它,請先使用其中createSource
一個多載來建立 Source Source
。 例如,若要從 Uri
譯碼,請呼叫 #createSource(ContentResolver, Uri)
並將結果傳遞至 #decodeDrawable(Source)
或 #decodeBitmap(Source)
:
File file = new File(...);
ImageDecoder.Source source = ImageDecoder.createSource(file);
Drawable drawable = ImageDecoder.decodeDrawable(source);
若要變更預設設定,請將 和 OnHeaderDecodedListener OnHeaderDecodedListener
傳遞Source Source
至 #decodeDrawable(Source, OnHeaderDecodedListener)
或 #decodeBitmap(Source, OnHeaderDecodedListener)
。 例如,若要建立具有原始影像寬度和高度一半的取樣影像,請在 內OnHeaderDecodedListener#onHeaderDecoded onHeaderDecoded
呼叫 #setTargetSampleSize setTargetSampleSize(2)
:
OnHeaderDecodedListener listener = new OnHeaderDecodedListener() {
public void onHeaderDecoded(ImageDecoder decoder, ImageInfo info, Source source) {
decoder.setTargetSampleSize(2);
}
};
Drawable drawable = ImageDecoder.decodeDrawable(source, listener);
ImageInfo ImageInfo
包含編碼影像的相關信息,例如其寬度和高度,而且Source Source
當單OnHeaderDecodedListener OnHeaderDecodedListener
一與多個Source Source
物件搭配使用時,可以用來比對特定 Source Source
。
OnHeaderDecodedListener OnHeaderDecodedListener
也可以實作為 Lambda:
Drawable drawable = ImageDecoder.decodeDrawable(source, (decoder, info, src) -> {
decoder.setTargetSampleSize(2);
});
如果編碼的影像是動畫 GIF
或 WEBP
, #decodeDrawable decodeDrawable
則會傳 AnimatedImageDrawable
回 。 若要啟動動畫,請呼叫 AnimatedImageDrawable#start AnimatedImageDrawable.start()
:
Drawable drawable = ImageDecoder.decodeDrawable(source);
if (drawable instanceof AnimatedImageDrawable) {
((AnimatedImageDrawable) drawable).start();
}
根據預設, Bitmap
所建立的 ImageDecoder
(包括 內部 Drawable
的 一個 ) 將不可變(亦即 Bitmap#isMutable Bitmap.isMutable()
傳回 false
),而且通常會有 Config
Bitmap.Config#HARDWARE
。 雖然這些屬性可以使用 來變更 #setMutableRequired setMutableRequired(true)
(這隻與 #decodeBitmap(Source)
和 #decodeBitmap(Source, OnHeaderDecodedListener)
相容),但是 #setAllocator
也可以套用自定義效果,而不論最終傳回的物件是否可變動,傳遞 PostProcessor
至 #setPostProcessor setPostProcessor
。 PostProcessor
也可以是 Lambda:
Drawable drawable = ImageDecoder.decodeDrawable(source, (decoder, info, src) -> {
decoder.setPostProcessor((canvas) -> {
// This will create rounded corners.
Path path = new Path();
path.setFillType(Path.FillType.INVERSE_EVEN_ODD);
int width = canvas.getWidth();
int height = canvas.getHeight();
path.addRoundRect(0, 0, width, height, 20, 20, Path.Direction.CW);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.TRANSPARENT);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
canvas.drawPath(path, paint);
return PixelFormat.TRANSLUCENT;
});
});
如果編碼的影像不完整或包含錯誤,或在 Exception
譯碼期間發生 , DecodeException DecodeException
則會擲回 。 在某些情況下, ImageDecoder
可能已譯碼影像的一部分。 若要顯示部分影像, OnPartialImageListener OnPartialImageListener
必須將 傳遞至 #setOnPartialImageListener setOnPartialImageListener
。 例如:
Drawable drawable = ImageDecoder.decodeDrawable(source, (decoder, info, src) -> {
decoder.setOnPartialImageListener((DecodeException e) -> {
// Returning true indicates to create a Drawable or Bitmap even
// if the whole image could not be decoded. Any remaining lines
// will be blank.
return true;
});
});
的 android.graphics.ImageDecoder
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
欄位
AllocatorDefault |
已淘汰.
使用像素記憶體的預設配置。 |
AllocatorHardware |
已淘汰.
|
AllocatorSharedMemory |
已淘汰.
針對圖元記憶體使用共用記憶體。 |
AllocatorSoftware |
已淘汰.
使用圖元記憶體的軟體配置。 |
MemoryPolicyDefault |
已淘汰.
對內部 |
MemoryPolicyLowRam |
已淘汰.
盡可能使用較 |
屬性
Class |
傳回這個 |
Crop |
如果已設定,則傳回裁剪矩形。 -或- 將輸出裁剪為 |
DecodeAsAlphaMaskEnabled |
傳回是否要將單一通道輸入視為Alpha。 -或- 指定是否可能將輸出視為 Alpha 遮罩。 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
JniIdentityHashCode |
類別,用於將編碼影像 (例如 |
JniPeerMembers |
類別,用於將編碼影像 (例如 |
MemorySizePolicy |
擷取已 |
MutableRequired |
傳回譯 |
OnPartialImageListener |
在這裡物件上設定 (replace) |
PeerReference |
類別,用於將編碼影像 (例如 |
PostProcessor |
|
ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 (繼承來源 Object) |
ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 (繼承來源 Object) |
UnpremultipliedRequired |
傳回 是否會 |
方法
Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
Close() |
關閉此資源,放棄任何基礎資源。 |
CreateSource(AssetManager, String) |
從 |
CreateSource(Byte[], Int32, Int32) |
從 |
CreateSource(Byte[]) |
從 |
CreateSource(ByteBuffer) |
從 |
CreateSource(ContentResolver, Uri) |
從 |
CreateSource(File) |
從 |
CreateSource(ICallable) |
從 |
CreateSource(Resources, Int32) |
從 |
DecodeBitmap(ImageDecoder+Source, ImageDecoder+IOnHeaderDecodedListener) |
請參閱 |
DecodeBitmap(ImageDecoder+Source) |
請參閱 |
DecodeDrawable(ImageDecoder+Source, ImageDecoder+IOnHeaderDecodedListener) |
請參閱 |
DecodeDrawable(ImageDecoder+Source) |
請參閱 |
Dispose() |
類別,用於將編碼影像 (例如 |
Dispose(Boolean) |
類別,用於將編碼影像 (例如 |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
IsMimeTypeSupported(String) |
如果指定的 MIME 類型是可由這個類別譯碼的支援檔案格式,則傳回 。 |
JavaFinalize() |
當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。 (繼承來源 Object) |
Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
SetTargetColorSpace(ColorSpace) |
指定輸出所需的 |
SetTargetSampleSize(Int32) |
使用 sampleSize 設定目標大小。 |
SetTargetSize(Int32, Int32) |
指定輸出 |
ToArray<T>() |
類別,用於將編碼影像 (例如 |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
UnregisterFromRuntime() |
類別,用於將編碼影像 (例如 |
Wait() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
事件
PartialImage |
類別,用於將編碼影像 (例如 |
明確介面實作
IJavaPeerable.Disposed() |
類別,用於將編碼影像 (例如 |
IJavaPeerable.DisposeUnlessReferenced() |
類別,用於將編碼影像 (例如 |
IJavaPeerable.Finalized() |
類別,用於將編碼影像 (例如 |
IJavaPeerable.JniManagedPeerState |
類別,用於將編碼影像 (例如 |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
類別,用於將編碼影像 (例如 |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
類別,用於將編碼影像 (例如 |
IJavaPeerable.SetPeerReference(JniObjectReference) |
類別,用於將編碼影像 (例如 |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
類別,用於將編碼影像 (例如 |
GetJniTypeName(IJavaPeerable) |
類別,用於將編碼影像 (例如 |