如何设置图像评级?

时间:2014-08-19 09:36:11

标签: c#

enter image description here 在我的项目中,我必须以任何格式(* .png,* .jpg,* .bmp等)设置图像评级值,并返回该值。 我尝试使用PropertyItem。它不起作用。

Image im = Image.FromFile("D:\\2.jpg");
int intValue = 3;
byte[] intBytes = BitConverter.GetBytes(intValue);
if (BitConverter.IsLittleEndian)Array.Reverse(intBytes);
byte[] result = intBytes;
PropertyItem prop = im.GetPropertyItem(18246);
prop.Value = result;
im.SetPropertyItem(prop);

有人这样做,如果是的话,谢谢?

2 个答案:

答案 0 :(得分:1)

设置评级您必须设置两个值。 评分评分百分比

  • Exif.Image.Rating(18246)
  • Exif.Image.RatingPercent(18249)

这两个值彼此对应。因此,仅设置评级并不反映Windows中的评级星。 (事实上​​它非常棘手,因为你设置了值,你可以读它,但在Windows资源管理器中没有任何变化)。

 class Program
{
    static void Main(string[] args)
    {
        //0,1,2,3,4,5
        SetRating(0);
        SetRating(1);
        SetRating(2);
        SetRating(3);
        SetRating(4);
        SetRating(5);
    }

    private static void SetRating(short ratingValue)
    {
        short ratingPercentageValue = 0;
        switch (ratingValue)
        {
            case 0: ratingPercentageValue = ratingValue; break;
            case 1: ratingPercentageValue = ratingValue; break;
            default: ratingPercentageValue = (short)((ratingValue - 1) * 25); break;
        }

        string SelectedImage = @"d:\Trash\phototemp\IMG_1200.JPG";
        using (var imageTemp = System.Drawing.Image.FromFile(SelectedImage))
        {
            var rating = imageTemp.PropertyItems.FirstOrDefault(x => x.Id == 18246);
            var ratingPercentage = imageTemp.PropertyItems.FirstOrDefault(x => x.Id == 18249);

            rating.Value = BitConverter.GetBytes(ratingValue);
            rating.Len= rating.Value.Length;
            ratingPercentage.Value = BitConverter.GetBytes(ratingPercentageValue);
            ratingPercentage.Len = ratingPercentage.Value.Length;
            imageTemp.SetPropertyItem(rating);
            imageTemp.SetPropertyItem(ratingPercentage);
            imageTemp.Save(SelectedImage + "new" + ratingValue +".jpg");

        }
    }
}

答案 1 :(得分:-1)

解决方案不是最佳(和hackish),但最简单的方法是:

1)使用硬盘上的图像。任何形象。只需手动评级,以便图像具有此属性。

2)此图像将作为您的虚拟图像",以便您可以加载它以便在其上调用getPropertyItem(),以获取属性。

3)获得PropertyItem后,只需更改其值,并在实际图像上使用SetPropertyItem。

    string dummyFileName = @"C:\Users\<youruser>\Pictures\dummy.jpg";
    string realFileName = @"C:\Users\<youruser>\Pictures\real.jpg";
    string realFileNameOutput = @"C:\Users\<youruser\Pictures\real_rated.jpg";

    Image dummyFile = Image.FromFile(dummyFileName);
    var propertyItem = dummyFile.GetPropertyItem(18246);

    Image realImage = Image.FromFile(realFileName);
    realImage.SetPropertyItem(propertyItem);
    realImage.Save(realFileNameOutput);