大家好,我有一张图片,希望在图片底部添加二进制数据。
RGBImage rgbImage = (RGBImage) RGBImage.LoadImage(@"test.tiff");
byte[] bytes = File.ReadAllBytes(@"C:\TEMP\gili.bin");
int padding =(int) Math.Ceiling((double)bytes.Length/(rgbImage.Width*3));
byte[] newMakerNoteImage = new byte[rgbImage[0].Data.Length + (rgbImage.Width * 3 * padding)];
Buffer.BlockCopy(rgbImage[0].Data, 0, newMakerNoteImage, 0, rgbImage[0].Data.Length);
Buffer.BlockCopy(bytes, 0, newMakerNoteImage, rgbImage[0].Data.Length, bytes.Length);
BitmapPalette myPalette = BitmapPalettes.WebPalette;
// Creates a new empty image with the pre-defined palette
BitmapSource image = BitmapSource.Create(
rgbImage.Width,
rgbImage.Height,
96,
96,
PixelFormats.Bgr24,
myPalette,
newMakerNoteImage,
rgbImage.Width * 3);
FileStream stream = new FileStream(@"C:\TEMP\new.jpg", FileMode.Create);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.FlipHorizontal = false;
encoder.FlipVertical = false;
encoder.QualityLevel = 30;
encoder.Frames.Add(BitmapFrame.Create(image));
encoder.Save(stream);
这张图片的输出没问题,但它的二进制数据并没有被加入到图片末尾。 你能告诉我我是否做对了吗?
我认为我可能完全错了,需要使用EXIF将这个Makernote数据添加到图片中。这些数据不应该对图片的用户可见。
BitmapSource.Create
只处理相关数据,而JpegBitmapEncoder.Save
无论如何都会将其转换为不同的格式,所以如果这样做不起作用,我也不会感到惊讶。你尝试过在调用JpegBitmapEncoder.Save
后向输出流添加自定义数据吗? - Pieter WitvoetJpegBitmapEncoder
有一个MetaData
属性,也许这很有用? - Pieter Witvoet