как получить размер изображения без использования растрового или графического объекта в .net - PullRequest
0 голосов
/ 17 июня 2011

Я хочу создать интегрированную функцию SQL CLR из Visual C #, теперь мое требование состоит в том, чтобы пользователь передавал путь к папке в качестве параметра, а функция должна получить весь файл изображения из папки и получить свое основное свойство, например FileSize., измерение и т. д., но кажется, что проект SQL не поддерживает пространство имен System.Drawing ... так как я создал ту же функцию в обычном проекте, она работала нормально, так как я смог использовать пространство имен System.Drawing, но здесь я не могу использовать,System.Drawing Namespace ... поэтому есть ли другой способ получить размер изображения ...

ниже - код, который я использовал в моем обычном проекте.

public DataTable InsertFile(string FolderPath)  
{   
    DataTable dt = new DataTable();  
    DataColumn[] col = new DataColumn[] { new DataColumn("FileName",   typeof(System.String)), new DataColumn("FileSize", typeof(System.Int32)), new   DataColumn("FilePath", typeof(System.String)), new DataColumn("Width",   typeof(System.Int32)), new DataColumn("Height", typeof(System.Int32)) };  
    dt.Columns.AddRange(col);  
    FileInfo info= null;  
    Bitmap bmp = null;  
    foreach (String s in Directory.GetFiles(FolderPath, "*.jpg"))  
    {  
        info = new FileInfo(s);  
        bmp = new Bitmap(s);  
        DataRow dr = dt.NewRow();  
        dr["FileName"] = Path.GetFileName(s); 
        dr["FileSize"] = info.Length / 1024;    
        dr["FilePath"] = s;  
        dr["Width"] = bmp.Width;  
        dr["Height"] = bmp.Height;  
        dt.Rows.Add(dr);  
    }  
    return dt;  
}  

Кто-нибудь знает, как получить размер изображения без использования пространства имен System.Drawing.

Ответы [ 2 ]

1 голос
/ 17 июня 2011

вау, никто никогда не пробовал это сделать раньше, но если использование рисования в проекте SQL не разрешено, попробуйте прочитать информацию заголовка, как это http://www.codeproject.com/KB/cs/ReadingImageHeaders.aspx

Правка включает код, с изменением, чтобы удалить зависимость от размера.

while (binaryReader.ReadByte() == 0xff)
        {
            byte marker = binaryReader.ReadByte();
            ushort chunkLength = binaryReader.ReadLittleEndianInt16();

            if (marker == 0xc0)
            {
                binaryReader.ReadByte();

                int height = binaryReader.ReadLittleEndianInt16();
                int width = binaryReader.ReadLittleEndianInt16();
                return new int[] { width, height };
            }

            binaryReader.ReadBytes(chunkLength - 2);
        }
0 голосов
/ 17 июня 2011

Вам подходит объект Image?

System.Drawing.Image forSize = System.Drawing.Image.FromFile(s);
dr["Width"] = forSize.Width;

и пр.

Что нибудь лучше или такая же проблема?

...