2012-01-11 3 views
0

Как преобразовать следующий Binary значение растрового изображения в ASP.NET C#Преобразование двоичного значения в Bitmap изображения

89504e470d0a1a0a0000000d4948445200000103000000cf0806000000f18cb4b00000000473424954080808087c086488000000097048597300000b1200000b1201d2dd7efc00000016744558744372656174696f6e2054696d650031322f32372f3131cce39cd90000002674455874536f667477617265005245534f5552434553204e4f54205553454420464f5220454e47494e45f6c2e0720000200049444154789cec9d779c5d5775efbffbf473fb748d7aefdd922c775bd84e6c638a1d20b4600831844e48422f2f24218440c80b2fe5250412420fa1d9e082255bb66cc956b7ba2c8d6634bddeb9fdb4bddf1fe76a2cd932312f8065657e9fcffd7c

Ни один из ответов подобного вопроса не помог мне. Кто-нибудь, пожалуйста, помогите!

+2

Что представляет собой это двоичное значение? Откуда вы его взяли? – Oded

+0

Не похож на base64 –

+1

нажмите клавишу «Печать экрана» на клавиатуре –

ответ

4

Похож на изображение в формате PNG (это изображение только 100х100 пикселей). Вы можете использовать following function преобразовать эту HEX строку в массив байтов и сохранить его в файл:

class Program 
{ 
    static void Main() 
    { 
     var data = "89504e470d0a1a0a0000000d4948445200000103000000cf0806000000f18cb4b00000000473424954080808087c086488000000097048597300000b1200000b1201d2dd7efc00000016744558744372656174696f6e2054696d650031322f32372f3131cce39cd90000002674455874536f667477617265005245534f5552434553204e4f54205553454420464f5220454e47494e45f6c2e0720000200049444154789cec9d779c5d5775efbffbf473fb748d7aefdd922c775bd84e6c638a1d20b4600831844e48422f2f24218440c80b2fe5250412420fa1d9e082255bb66cc956b7ba2c8d6634bddeb9fdb4bddf1fe76a2cd932312f8065657e9fcffd7c"; 
     var buffer = StringToByteArray(data); 
     File.WriteAllBytes("test.png", buffer); 
    } 

    static byte[] StringToByteArray(string hex) 
    { 
     return Enumerable 
      .Range(0, hex.Length) 
      .Where(x => x % 2 == 0) 
      .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) 
      .ToArray(); 
    } 
} 

Если вы хотите, чтобы отобразить его динамически в ASP.NET можно написать общий обработчик, который будет служить этот файл :

public class MyImage : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "image/png"; 
     var data = "89504e470d0a1a0a0000000d4948445200000103000000cf0806000000f18cb4b00000000473424954080808087c086488000000097048597300000b1200000b1201d2dd7efc00000016744558744372656174696f6e2054696d650031322f32372f3131cce39cd90000002674455874536f667477617265005245534f5552434553204e4f54205553454420464f5220454e47494e45f6c2e0720000200049444154789cec9d779c5d5775efbffbf473fb748d7aefdd922c775bd84e6c638a1d20b4600831844e48422f2f24218440c80b2fe5250412420fa1d9e082255bb66cc956b7ba2c8d6634bddeb9fdb4bddf1fe76a2cd932312f8065657e9fcffd7c"; 
     var buffer = StringToByteArray(data); 
     context.Response.OutputStream.Write(buffer, 0, buffer.Length); 
    } 

    private byte[] StringToByteArray(string hex) 
    { 
     return Enumerable 
      .Range(0, hex.Length) 
      .Where(x => x % 2 == 0) 
      .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) 
      .ToArray(); 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 

и в какой-то веб-форму, где вы хотите, чтобы отобразить его можно использовать графический элемент управления, указывающий на этот обработчик:

<asp:Image ID="img" runat="server" ImageUrl="~/MyImage.ashx" /> 

или простой статический <img> тег, если вы предпочитаете:

<img src="<%= ResolveUrl("~/MyImage.ashx") %>" alt="" /> 

Еще одна возможность заключается в том, чтобы использовать Data URI scheme (предполагая, что клиентские браузеры поддерживают):

<img src="data:image/png;base64,<%= MyImageData() %>" alt="" /> 

где функция MyImageData может быть определена в коде позади:

public partial class _Default : System.Web.UI.Page 
{ 
    protected string MyImageData() 
    { 
     var data = "89504e470d0a1a0a0000000d4948445200000103000000cf0806000000f18cb4b00000000473424954080808087c086488000000097048597300000b1200000b1201d2dd7efc00000016744558744372656174696f6e2054696d650031322f32372f3131cce39cd90000002674455874536f667477617265005245534f5552434553204e4f54205553454420464f5220454e47494e45f6c2e0720000200049444154789cec9d779c5d5775efbffbf473fb748d7aefdd922c775bd84e6c638a1d20b4600831844e48422f2f24218440c80b2fe5250412420fa1d9e082255bb66cc956b7ba2c8d6634bddeb9fdb4bddf1fe76a2cd932312f8065657e9fcffd7c"; 
     var buffer = StringToByteArray(data); 
     return Convert.ToBase64String(buffer); 
    } 

    private byte[] StringToByteArray(string hex) 
    { 
     return Enumerable 
      .Range(0, hex.Length) 
      .Where(x => x % 2 == 0) 
      .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) 
      .ToArray(); 
    } 
} 
+0

Спасибо за ваш код. Но я не вижу выхода. Как я могу отобразить это изображение с помощью входа ASP: Image или HTML? – lock

+0

@lock, ответ обновляется с примером. –

+0

отличный ответ +1 – Matt

Смежные вопросы