问题描述
我正在尝试通过代码在C#中设置TIFF
图像的dpi值,但是在保存图像后以某种方式无法保留这些值.
I'm trying to set dpi value of a TIFF
Image in C# through code but somehow the values are not persisted after saving the Image.
using (var image = new Bitmap(@"c:\newimage.tif"))
{
uint[] uintArray = { 300, 1}; //Setting DPI as 300
byte[] bothArray = ConvertUintArrayToByteArray(uintArray);
PropertyItem item = image.PropertyItems.Where(p => p.Id == 0x11A).Single();
var val = BitConverter.ToUInt32(item.Value, 0);
Console.WriteLine(val);
item.Id = 0x11A;
item.Value = bothArray;
item.Type = 5;
item.Len = item.Value.Length;
image.SetPropertyItem(item);
image.Save(@"c:\newimage1.tif"); //Save image to new File
}
此代码有什么问题?任何帮助将不胜感激. TIFF文件标签定义
What is wrong with this code? Any kind of help would be appreciated.TIFF file tag definitions
推荐答案
同时设置属性值和位图分辨率,然后重新保存图像应会更改分辨率(适用于我的示例图像).我相信原始文件必须具有X和Y分辨率的标签,不确定如果.NET不存在,.NET是否会添加这些标签(必须进行测试).
Setting both the property value and the bitmap resolution and then resaving the image should change the resolution (It worked on my sample image). I believe the original file has to have the tags for X and Y resolution present, not sure if .NET will add those tags if not present (would have to test).
这是一个使用.NET读取和写入TIFF图像的X和Y分辨率的示例:
Here's an example of reading and writing the X and Y resolution a TIFF image using .NET:
int numerator, denominator;
using (Bitmap bmp = (Bitmap)Bitmap.FromFile(@"C:\input.tif"))
{
// obtain the XResolution and YResolution TIFFTAG values
PropertyItem piXRes = bmp.GetPropertyItem(282);
PropertyItem piYRes = bmp.GetPropertyItem(283);
// values are stored as a rational number - numerator/denominator pair
numerator = BitConverter.ToInt32(piXRes.Value, 0);
denominator = BitConverter.ToInt32(piXRes.Value, 4);
float xRes = numerator / denominator;
numerator = BitConverter.ToInt32(piYRes.Value, 0);
denominator = BitConverter.ToInt32(piYRes.Value, 4);
float yRes = numerator / denominator;
// now set the values
byte[] numeratorBytes = new byte[4];
byte[] denominatorBytes = new byte[4];
numeratorBytes = BitConverter.GetBytes(600); // specify resolution in numerator
denominatorBytes = BitConverter.GetBytes(1);
Array.Copy(numeratorBytes, 0, piXRes.Value, 0, 4); // set the XResolution value
Array.Copy(denominatorBytes, 0, piXRes.Value, 4, 4);
Array.Copy(numeratorBytes, 0, piYRes.Value, 0, 4); // set the YResolution value
Array.Copy(denominatorBytes, 0, piYRes.Value, 4, 4);
bmp.SetPropertyItem(piXRes); // finally set the image property resolution
bmp.SetPropertyItem(piYRes);
bmp.SetResolution(600, 600); // now set the bitmap resolution
bmp.Save(@"C:\output.tif"); // save the image
}
这篇关于在C#中将DPI值设置为Tiff图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!