2016-11-22 4 views
1

Как передать шестнадцатеричную строку значение на мою страницу .ashx, где мне нужно в System.Drawing.ColorКак передать шестнадцатеричную строку цвета из .aspx в .ashx

Если я пройти обычную строку, как:

string name="John" 

Все работает нормально.

Но если я пытаюсь передать шестнадцатеричное значение как:

string bg_color ="#000000" 

строка на странице .ashx пуста или «»

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

Color _bgClr = ColorTranslator.FromHtml(string.Format{"#{0}", text_background_color); 

Я получаю ошибку # недопустим параметр когда я пытаюсь изменить HEX (фоновые значения) на моем веб-форму.

Любые подсказки?

Пожалуйста, помогите

UPDATE

<img class="link-realtime1" src="ImageGen.ashx?bo=<%=inp_barva_ozadja.Text %>&bt=<%=inp_barva_teksta.Text %>" style="float: left;margin-top: -20px;"/> 

UPDATE2 - .aspx

<form id="image_generator" runat="server"> 
<div class="main"> 
    <div class="controls"> 
     <div class="options" style="float: left;width: 50%;"> 
      <label> 
       <span>Širina</span> 
       <asp:TextBox ID="inp_sirina" Width="125" runat="server"></asp:TextBox> 
      </label><span style="color:red"><asp:Literal ID="napaka_s" runat="server"></asp:Literal></span><br /> 
      <label> 
       <span>Višina</span> 
       <asp:TextBox ID="inp_visina" Width="125" runat="server"></asp:TextBox> 
      </label><span style="color:red"><asp:Literal ID="napaka_v" runat="server"></asp:Literal></span><br /> 
      <label> 
       <span>Tekst</span> 
       <asp:TextBox ID="inp_text" Width="125" runat="server"></asp:TextBox> 
      </label><span style="color:red"><asp:Literal ID="napaka_t" runat="server"></asp:Literal></span><br />  
      <label> 
       <span>Velikost pisave</span> 
       <asp:TextBox ID="inp_velikost" Width="125px" runat="server"></asp:TextBox> 
      </label><span style="color:red"><asp:Literal ID="napaka_vp" runat="server"></asp:Literal></span><br />   
      <label> 
       <span>Barva ozadja</span> 
       <asp:TextBox ID="inp_barva_ozadja" Width="125px" runat="server"></asp:TextBox> 
      </label><span style="color:red"><asp:Literal ID="napaka_bo" runat="server"></asp:Literal></span><br /> 
      <label> 
       <span>Barva teksta</span> 
       <asp:TextBox ID="inp_barva_teksta" Width="125px" runat="server"></asp:TextBox> 
      </label><span style="color:red"><asp:Literal ID="napaka_bt" runat="server"></asp:Literal></span><br /> 
      <div id="colorpicker"></div><br /> 
      <script type="text/javascript"> 
       $(document).ready(function() { 
        $('#colorpicker').farbtastic('#inp_barva_ozadja'); 
       }); 
      </script> 
      <a class="link-realtime" href="ImageGen.ashx?w=<%= inp_sirina.Text %>&h=<%= inp_visina.Text %>&t=<%= inp_text.Text %>&ts=<%= inp_velikost.Text %>&bg=<%= inp_barva_ozadja.Text %>&tc=<%= inp_barva_teksta.Text %>">Generiraj sliko</a><br />  
     </div> 
     <script type="text/javascript"> 
      $('#inp_sirina, #inp_visina, #inp_barva_ozadja, #inp_barva_teksta, #inp_text, #inp_velikost').keyup(function() { 
      var tekst1 = $('#inp_sirina').val(); 
      var tekst2 = $('#inp_visina').val(); 
      var tekst3 = $('#inp_text').val(); 
      var v_pisave = $('#inp_velikost').val(); 
      var barva1 = $('#inp_barva_ozadja').val(); 
      var barva2 = $('#inp_barva_teksta').val();; 
      var path = "ImageGen.ashx?w=" + tekst1 + "&h=" + tekst2 + "&t=" + tekst3 + "&ts=" + v_pisave + "&bg=" + barva1 + "&tc=" + barva2;  
      $("a.link-realtime").attr("href", path);  
      $("img.link-realtime1").attr("src", path); 
      }); 
     </script>     
     <div id="output"> 
      <span class="output-result"></span></br> 
      <img class="link-realtime1" src="ImageGen.ashx?w=<%= inp_sirina.Text %>&h=<%= inp_visina.Text %>&t=<%= inp_text.Text %>&ts=<%= inp_velikost.Text %>&bo=<%=inp_barva_ozadja.Text %>&bt=<%=inp_barva_teksta.Text %>" style="float: left;margin-top: -20px;"/> 
     </div></br> 
    </div> 
</div> 
</form> 

Update3 - .ashx

public void ProcessRequest(HttpContext context) 
    { 

     string _width = context.Request.QueryString["w"]; 
     int __width = Convert.ToInt32(_width); 
     string _height = context.Request.QueryString["h"]; 
     int __height = Convert.ToInt32(_height); 
     string text = context.Request.QueryString["t"]; 
     string text_size = context.Request.QueryString["ts"]; 
     int _text_size = Convert.ToInt32(text_size); 
     /*string text_background_color = context.Request.QueryString["bo"];*/ 
     string text_background_color = "#000000"; 
     Color _bgClr = ColorTranslator.FromHtml(text_background_color); 
     /*Color _bgClr = ColorTranslator.FromHtml(string.Format("{0}", "#" + text_background_color));*/ 
     /*string text_color = context.Request.QueryString["bt"];*/ 
     string text_color = "#FFFFFF"; 
     Color _txtClr = ColorTranslator.FromHtml(text_color); 

     Bitmap slika = new Bitmap(1, 1); 

     float koordinataX = (__width/2) - (((__width/2)/2)/2); 
     float koordinataY = (__height/2); 

     if (koordinataX < 50) 
     { 
      _text_size = _text_size/2; 
     } 

     text = Regex.Replace(text, "(.{" + 20 + "})", "$1" + Environment.NewLine); 

     Font pisava = new Font("Verdana", _text_size, FontStyle.Bold, GraphicsUnit.Point); 

     Graphics graphics = Graphics.FromImage(slika); 

     slika = new Bitmap(slika, new Size(__width, __height)); 

     graphics = Graphics.FromImage(slika); 
     graphics.Clear(_bgClr); 
     graphics.TextRenderingHint = TextRenderingHint.AntiAlias; 

     using (var sf = new StringFormat() 
     { 
      Alignment = StringAlignment.Center, 
      LineAlignment = StringAlignment.Center 
     }) 
     { 
      graphics.DrawString(text, pisava, new SolidBrush(_txtClr), new Rectangle(0, 0, slika.Width, slika.Height), sf); 
     } 

     /*graphics.DrawString(text, pisava, new SolidBrush(_txtClr), koordinataX, koordinataY);*/ 

     MemoryStream ms = new MemoryStream(); 
     slika.Save(ms, ImageFormat.Png); 

     byte[] bajt = ms.ToArray(); 

     context.Response.ContentType = "image/png"; 
     context.Response.BinaryWrite(bajt); 
     context.Response.Flush(); 
    } 
+0

вы пробовали кодирования унифицированного передавая параметр 'bg_color' в .ashx? –

+0

если кодировка url отличается от того, что я сделал (см. Обновление), можете ли вы, пожалуйста, указать пример моей формы @BobDust – aiden87

ответ

1

Неверный код string.Format. Должно быть

string.Format("{0}", "#" + text_background_color) 

Но вы можете обойтись без.

string text_background_color = "FF00FC"; 

Color _bgClr = ColorTranslator.FromHtml("#" + text_background_color); 

UPDATE

Вы преобразования QueryString параметров без проверки значений NULL, так что если один или более QueryString нет или пусто, ваш код будет терпеть неудачу. Это не имеет никакого отношения к настройке цвета.

string _width = context.Request.QueryString["w"]; 
string _height = context.Request.QueryString["h"]; 
string text = context.Request.QueryString["t"]; 
string text_size = context.Request.QueryString["ts"]; 
string text_background_color = context.Request.QueryString["bg"]; 
int __width = 300; 
int __height = 200;  
int __text_size = 10; 

if (!string.IsNullOrEmpty(_width)) 
{ 
    __width = Convert.ToInt32(_width); 
} 

if (!string.IsNullOrEmpty(_height)) 
{ 
    __height = Convert.ToInt32(_height); 
} 

if (!string.IsNullOrEmpty(text_size)) 
{ 
    __text_size = Convert.ToInt32(text_size); 
} 

if (!string.IsNullOrEmpty(text_background_color)) 
{ 
    text_background_color = "#" + text_background_color; 
} 
else 
{ 
    text_background_color = "#000000"; 
} 
+0

странно, все вы, кажется, предлагаете это. и да, пока он, вероятно, должен работать, я получаю эту ошибку = Дополнительная информация: # недопустимое значение для Int32. Это не происходит, когда страница загружается и имеет значение по умолчанию 000000, только когда я пытаюсь изменить ее вручную на ffffff или любую другую ошибку – aiden87

+0

Int32? Где и как вы используете '_bgClr'? И что вы подразумеваете под изменением вручную? Проблема, вероятно, в вашем коде. – VDWWD

+0

У меня есть веб-форма с 6 различными текстовыми полями (ширина, высота, текст, размер шрифта, цвет фона и цвет текста) ... вся форма имеет значения по умолчанию за кодом ... теперь пользователь может вводить свои собственные значения и генерировать желаемые image ... я получаю все пользовательские значения (ширина, высота, текст, размер шрифта), за исключением цвета фона и цвета текста ... что означает, что изображение создается, когда пользователь хочет его, но не меняет цвета. – aiden87

1

Я думаю, что простое кодирование URL-адрес для значения параметра bg_color как это:

<img class="link-realtime1" src="ImageGen.ashx?w=<%= inp_sirina.Text %>&h=<%= inp_visina.Text %>&t=<%= inp_text.Text %>&ts=<%= inp_velikost.Text %>&bo=<%=inp_barva_ozadja.Text %>&bt=<%=inp_barva_teksta.Text %>&bg_color=<%=HttpUtility.UrlEncode("#000000") %>" style="float: left;margin-top: -20px;"/> 

может быть извлечено в родовом обработчик, как показано ниже:

var bgColor = context.Request.QueryString["bg_color"]; 
+0

, но это будет работать только на предварительно присвоенное значение # 000000, не так ли? Значит, что он-лайн по форме, пользователь не сможет изменить его на все, что захочет. или я ошибаюсь? – aiden87

+0

Да, этот ответ посвящен прохождению параметров. Для передачи значений, введенных пользователем, вам необходимо прочитать их из набора цветов 'inp_barva_ozadja'. –

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

  • Нет связанных вопросов^_^