2016-11-10 5 views
0

この質問はSystem.Drawing.Bitmapに固有です。C#ビットマップはどこから来たのかを覚えていますか?

は、このような状況を考えてみましょう:私はそう

public Bitmap GetImage(string sourceImage) 
{ 
    //sourceImage contains something like "C:\\Users\\my.name\\path\\to\\image.jpg" 
    //error/valid filename checking omitted in this example 
    Bitmap img = new Bitmap(sourceImage); 
    return img; 
} 

のようなビットマップは、今、私のコードが行くとそのBitmapで物事を行い作成します。後で、コードの無関係な部分は、その画像で終了したと判断し、Bitmapオブジェクトを保持する必要はありません。しかし、それが再び必要になる可能性があるので、それは何かを覚えておいてほしいので、それが何かを再作成する方法を知っていることを覚えておいてください。これは主にメモリによるものです。パスウェイ文字列を保存すると、(潜在的に)大きな画像を保存するよりもスペースが少なくなります。

Bitmapはどこから来たのか、それともその情報を持ち歩かなければなりませんか?

私はちょうど、TagプロパティにsourceImageを割り当てるしかし、私は他のもののためにTagを使用していると私はむしろそれをovercomplicateないだろうと考えます。私は問題を救うためにソース情報がまだアクセス可能であることを望んでいます。

+2

いいえ - https://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Image.cs,b2315d1ff08bc616とannoyinglyクラスは、派生クラスを作成できないように封印されていますImagePathを属性として持つ – pm100

+0

なぜタグを使用しないのですか?あなた自身のクラスを作り、それのインスタンスをそこに置くと、それはまさにあなたが望むもののようなものです。 – DavidG

+0

@DavidGタグを使って他の情報を伝えています。私がそれを修正してより多くの情報を持ち歩くならば、結果として得られるリファクタはかなりの問題になります。私は可能な限り避けることを望んでいます。 – Cody

答えて

5

私は現在ロードされ、アンロードするための別の方法を持っていない場合でも(処分とセットビットマップゲッターがインテリジェントにし、ビットマップを読み込むことができ、余分な機能

class BitmapContainer : IDisposable 
{ 
    Bitmap Value {get; private set;} 
    string OriginalLocation {get; private set;} 

    public BitmapContainer(string sourceImage) 
    { 
     Value = new Bitmap(sourceImage); 
     OriginalLocation = sourceImage; 
     //you get the picture 
    } 

    //Don't forget to implement a dispose pattern because Bitmap uses native resources 
} 

を提供するために、コンテナクラスを作成することをお勧めしますnullにする)

関連する問題