Graphics.DrawImageUnscaled does not Draw Image Unscaled.

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
I use DrawImageUnscaled<i> </i>with a bitmap for drawing the text
inside.
That text bitmap will be inserted into a transformed(scaled) bitmap.

Normally, <i>DrawImageUnscaled</i> should Draw an <i>Unscaled</i> Image...

<i><b>MSDN </b>:</i>
<div style="background-color:rgb(255, 204, 102)" class=majorTitle>.NET Framework Class Library <div style="background-color:rgb(255, 204, 102)" class=title>Graphics<font class=cs>.</font><b>DrawImageUnscaled </b>Method<div class=summary> <i><b>Draws</b> the specified <b>image using its original</b> physical <b>size </b>at the location specified by a coordinate pair.
</i>



<p style="background-color:rgb(255, 204, 102) But this is not the case....

<table style="border-width:0px;margin:2px 0px;width:99%;border-collapse:collapse;background-color:rgb(255, 255, 255)" cellpadding=0 cellspacing=0><tbody><tr><td><nobr>56</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue private</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  DrawText(</font><font style="color:blue string</font><font style="font-size:11px  text, Font font, PointF point, Color color) </font></td></tr><tr><td><nobr>57</nobr></td><td>        { </td></tr><tr><td><nobr>58</nobr></td><td style="background-color:rgb(247, 247, 247)             Bitmap bitmap = <font style="color:blue new</font><font style="font-size:11px  Bitmap(160, 50); </font></td></tr><tr><td><nobr>59</nobr></td><td>            Graphics g = Graphics.FromImage(bitmap); </td></tr><tr><td><nobr>60</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:blue using</font><font style="font-size:11px  (Pen pen = </font><font style="color:blue new</font><font style="font-size:11px  Pen(color)) </font></td></tr><tr><td><nobr>61</nobr></td><td>            { </td></tr><tr><td><nobr>62</nobr></td><td style="background-color:rgb(247, 247, 247)                 g.DrawString(text, font, pen.Brush, 0f, 0f); </td></tr><tr><td><nobr>63</nobr></td><td>            } </td></tr><tr><td><nobr>64</nobr></td><td style="background-color:rgb(247, 247, 247)             Point intPoint = <font style="color:blue new</font><font style="font-size:11px  Point((</font><font style="color:blue int</font><font style="font-size:11px )Math.Round(point.X, 0), (</font><font style="color:blue int</font><font style="font-size:11px )Math.Round(point.Y, 0)); </font></td></tr><tr><td><nobr>65</nobr></td><td>            <font style="color:green // draw it to the screen bitmap</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>66</nobr></td><td style="background-color:rgb(247, 247, 247)             <b>graphics.DrawImageUnscaled(bitmap, intPoint); </b></td></tr><tr><td><nobr>67</nobr></td><td>        }</td></tr></tbody></table>
<b><font style="font-size:14px The context:</font></b>

In this example well use a bitmap to draw a triangle where a point has a description (to show in the picture);

In order to verify this behavior, you should have a Windows Project with a Form names <b>Form1 </b>(by default).
This form should subscribe to <font color="#3366ff Form1_Load</font> and <font style="font-size:11px" color="#3366ff Form1_ClientSizeChanged</font> events.

NB!
<font style="font-size:10px We should include the text into the bitmap, and not to draw it simply to the screen, the bitmap is used for save the image on the clipboard or a file...</font>

<div style="overflow:auto;background-color:white;line-height:100% ! important;font-family:Courier New;font-size:11px <table style="border-width:0px;margin:2px 0px;width:99%;border-collapse:collapse;background-color:rgb(255, 255, 255)" cellpadding=0 cellspacing=0><col style="border-right:1px solid gray;font-family:Courier New;font-size:11px;background-color:rgb(238, 238, 238);padding-right:5px;padding-left:10px;width:5px;color:gray;text-align:right;vertical-align:top <col style="font-family:Courier New;font-size:11px;padding-left:10px;white-space:nowrap <tbody><tr><td><nobr>1</nobr></td><td><font style="font-size:11px </font><font style="color:blue using</font><font style="font-size:11px  System; </font></td></tr><tr><td><nobr>2</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:blue using</font><font style="font-size:11px  System.Drawing; </font></td></tr><tr><td><nobr>3</nobr></td><td><font style="color:blue using</font><font style="font-size:11px  System.Drawing.Drawing2D; </font></td></tr><tr><td><nobr>4</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:blue using</font><font style="font-size:11px  System.Windows.Forms; </font></td></tr><tr><td><nobr>5</nobr></td><td> </td></tr><tr><td><nobr>6</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:blue namespace</font><font style="font-size:11px  WindowsFormsApplication2 </font></td></tr><tr><td><nobr>7</nobr></td><td>{ </td></tr><tr><td><nobr>8</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  partial </font><font style="color:blue class</font><font style="font-size:11px  Form1 : Form </font></td></tr><tr><td><nobr>9</nobr></td><td>    { </td></tr><tr><td><nobr>10</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue public</font><font style="font-size:11px  Form1() </font></td></tr><tr><td><nobr>11</nobr></td><td>        { </td></tr><tr><td><nobr>12</nobr></td><td style="background-color:rgb(247, 247, 247)             InitializeComponent(); </td></tr><tr><td><nobr>13</nobr></td><td>        } </td></tr><tr><td><nobr>14</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>15</nobr></td><td>        <font style="color:blue private</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  Form1_Load(</font><font style="color:blue object</font><font style="font-size:11px  sender, EventArgs e) </font></td></tr><tr><td><nobr>16</nobr></td><td style="background-color:rgb(247, 247, 247)         { </td></tr><tr><td><nobr>17</nobr></td><td>            <font style="color:blue this</font><font style="font-size:11px .SetStyle(ControlStyles.ResizeRedraw, </font><font style="color:blue true</font><font style="font-size:11px ); </font></td></tr><tr><td><nobr>18</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>19</nobr></td><td> </td></tr><tr><td><nobr>20</nobr></td><td style="background-color:rgb(247, 247, 247)         Graphics graphics; </td></tr><tr><td><nobr>21</nobr></td><td> </td></tr><tr><td><nobr>22</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue protected</font><font style="font-size:11px  </font><font style="color:blue override</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  OnPaint(PaintEventArgs e) </font></td></tr><tr><td><nobr>23</nobr></td><td>        { </td></tr><tr><td><nobr>24</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:blue base</font><font style="font-size:11px .OnPaint(e); </font></td></tr><tr><td><nobr>25</nobr></td><td> </td></tr><tr><td><nobr>26</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:blue if</font><font style="font-size:11px  (</font><font style="color:blue this</font><font style="font-size:11px .ClientRectangle.Height != 0) </font></td></tr><tr><td><nobr>27</nobr></td><td>            { </td></tr><tr><td><nobr>28</nobr></td><td style="background-color:rgb(247, 247, 247)                 Bitmap bitmap = <font style="color:blue new</font><font style="font-size:11px  Bitmap(</font><font style="color:blue this</font><font style="font-size:11px .ClientRectangle.Width, </font></td></tr><tr><td><nobr>29</nobr></td><td>                 <font style="color:blue this</font><font style="font-size:11px .ClientRectangle.Height); </font></td></tr><tr><td><nobr>30</nobr></td><td style="background-color:rgb(247, 247, 247)                 graphics = Graphics.FromImage(bitmap); </td></tr><tr><td><nobr>31</nobr></td><td>                <font style="color:blue this</font><font style="font-size:11px .ScaleImage(); </font></td></tr><tr><td><nobr>32</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>33</nobr></td><td>                GraphicsPath path = <font style="color:blue new</font><font style="font-size:11px  GraphicsPath(); </font></td></tr><tr><td><nobr>34</nobr></td><td style="background-color:rgb(247, 247, 247)                 path.AddPolygon(<font style="color:blue new</font><font style="font-size:11px  PointF[]      </font></td></tr><tr><td><nobr>35</nobr></td><td>             {      </td></tr><tr><td><nobr>36</nobr></td><td style="background-color:rgb(247, 247, 247)                  <font style="color:blue new</font><font style="font-size:11px  PointF(15, 15),      </font></td></tr><tr><td><nobr>37</nobr></td><td>                 <font style="color:blue new</font><font style="font-size:11px  PointF(100, 60),      </font></td></tr><tr><td><nobr>38</nobr></td><td style="background-color:rgb(247, 247, 247)                  <font style="color:blue new</font><font style="font-size:11px  PointF(50, 210)     </font></td></tr><tr><td><nobr>39</nobr></td><td>             }); </td></tr><tr><td><nobr>40</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>41</nobr></td><td>                <font style="color:blue using</font><font style="font-size:11px  (Pen pen = </font><font style="color:blue new</font><font style="font-size:11px  Pen(Color.Red)) </font></td></tr><tr><td><nobr>42</nobr></td><td style="background-color:rgb(247, 247, 247)                 { </td></tr><tr><td><nobr>43</nobr></td><td>                    graphics.DrawPath(pen, path); </td></tr><tr><td><nobr>44</nobr></td><td style="background-color:rgb(247, 247, 247)                 } </td></tr><tr><td><nobr>45</nobr></td><td> </td></tr><tr><td><nobr>46</nobr></td><td style="background-color:rgb(247, 247, 247)                 <font style="color:blue this</font><font style="font-size:11px .DrawText(</font><font style="color:blue "this Is A String in the Bitmap"</font><font style="font-size:11px , </font></td></tr><tr><td><nobr>47</nobr></td><td>                    <font style="color:blue new</font><font style="font-size:11px  Font(</font><font style="color:blue "Arial"</font><font style="font-size:11px , 10), path.PathPoints[1], Color.Red); </font></td></tr><tr><td><nobr>48</nobr></td><td style="background-color:rgb(247, 247, 247)                  </td></tr><tr><td><nobr>49</nobr></td><td>                 </td></tr><tr><td><nobr>50</nobr></td><td style="background-color:rgb(247, 247, 247)                 e.Graphics.DrawImage(bitmap, 0, 0); </td></tr><tr><td><nobr>51</nobr></td><td>                 </td></tr><tr><td><nobr>52</nobr></td><td style="background-color:rgb(247, 247, 247)                 <font style="color:green /*</font></td></tr><tr><td><nobr>53</nobr></td><td><font style="color:green                 e.Graphics.DrawString("this Is A String in the Panel",</font></td></tr><tr><td><nobr>54</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:green                     new Font("Arial", 10), Brushes.Blue,</font></td></tr><tr><td><nobr>55</nobr></td><td><font style="color:green                  GetScreenPoint(path.PathPoints[1]));</font></td></tr><tr><td><nobr>56</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:green                 */</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>57</nobr></td><td>            } </td></tr><tr><td><nobr>58</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>59</nobr></td><td> </td></tr><tr><td><nobr>60</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue private</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  DrawText(</font><font style="color:blue string</font><font style="font-size:11px  text, Font font, PointF point, Color color) </font></td></tr><tr><td><nobr>61</nobr></td><td>        { </td></tr><tr><td><nobr>62</nobr></td><td style="background-color:rgb(247, 247, 247)             Bitmap bitmap = <font style="color:blue new</font><font style="font-size:11px  Bitmap(160, 50); </font></td></tr><tr><td><nobr>63</nobr></td><td>            Graphics g = Graphics.FromImage(bitmap); </td></tr><tr><td><nobr>64</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:blue using</font><font style="font-size:11px  (Pen pen = </font><font style="color:blue new</font><font style="font-size:11px  Pen(color)) </font></td></tr><tr><td><nobr>65</nobr></td><td>            { </td></tr><tr><td><nobr>66</nobr></td><td style="background-color:rgb(247, 247, 247)                 g.DrawString(text, font, pen.Brush, 0f, 0f); </td></tr><tr><td><nobr>67</nobr></td><td>            } </td></tr><tr><td><nobr>68</nobr></td><td style="background-color:rgb(247, 247, 247)             Point intPoint = <font style="color:blue new</font><font style="font-size:11px  Point((</font><font style="color:blue int</font><font style="font-size:11px )Math.Round(point.X, 0), (</font><font style="color:blue int</font><font style="font-size:11px )Math.Round(point.Y, 0)); </font></td></tr><tr><td><nobr>69</nobr></td><td>            <font style="color:green // draw the TextBitmap to the ScreenBitmap</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>70</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:green // the text should remain unchanged (unscaled and unreflected)</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>71</nobr></td><td>            graphics.DrawImageUnscaled(bitmap, <font style="color:blue new</font><font style="font-size:11px  Rectangle(intPoint, bitmap.Size)); </font></td></tr><tr><td><nobr>72</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>73</nobr></td><td> </td></tr><tr><td><nobr>74</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue float</font><font style="font-size:11px  mdx, mdy, mScale; </font></td></tr><tr><td><nobr>75</nobr></td><td>        <font style="color:blue private</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  ScaleImage() </font></td></tr><tr><td><nobr>76</nobr></td><td style="background-color:rgb(247, 247, 247)         { </td></tr><tr><td><nobr>77</nobr></td><td>            <font style="color:blue float</font><font style="font-size:11px  scale = </font><font style="color:blue this</font><font style="font-size:11px .ClientRectangle.Height / 230f, </font></td></tr><tr><td><nobr>78</nobr></td><td style="background-color:rgb(247, 247, 247)                 dx = -10f, </td></tr><tr><td><nobr>79</nobr></td><td>                dy = 15f; </td></tr><tr><td><nobr>80</nobr></td><td style="background-color:rgb(247, 247, 247)             mdx = dx; </td></tr><tr><td><nobr>81</nobr></td><td>            mdy = dy; </td></tr><tr><td><nobr>82</nobr></td><td style="background-color:rgb(247, 247, 247)             mScale = scale; </td></tr><tr><td><nobr>83</nobr></td><td>            Matrix transformMatrix = <font style="color:blue new</font><font style="font-size:11px  Matrix( </font></td></tr><tr><td><nobr>84</nobr></td><td style="background-color:rgb(247, 247, 247)                 mScale, 0, </td></tr><tr><td><nobr>85</nobr></td><td>                0, -mScale, </td></tr><tr><td><nobr>86</nobr></td><td style="background-color:rgb(247, 247, 247)                 mdx, <font style="color:blue this</font><font style="font-size:11px .ClientRectangle.Height - mdy); </font></td></tr><tr><td><nobr>87</nobr></td><td> </td></tr><tr><td><nobr>88</nobr></td><td style="background-color:rgb(247, 247, 247)             graphics.Transform = transformMatrix; </td></tr><tr><td><nobr>89</nobr></td><td>        } </td></tr><tr><td><nobr>90</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>91</nobr></td><td>        PointF GetScreenPoint(PointF drawingPoint) </td></tr><tr><td><nobr>92</nobr></td><td style="background-color:rgb(247, 247, 247)         { </td></tr><tr><td><nobr>93</nobr></td><td>            PointF screenPoint = <font style="color:blue new</font><font style="font-size:11px  PointF(); </font></td></tr><tr><td><nobr>94</nobr></td><td style="background-color:rgb(247, 247, 247)             screenPoint.X = drawingPoint.X * mScale; </td></tr><tr><td><nobr>95</nobr></td><td>            screenPoint.Y = <font style="color:blue this</font><font style="font-size:11px .ClientRectangle.Height - drawingPoint.Y * mScale; </font></td></tr><tr><td><nobr>96</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:blue return</font><font style="font-size:11px  screenPoint; </font></td></tr><tr><td><nobr>97</nobr></td><td>        } </td></tr><tr><td><nobr>98</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>99</nobr></td><td>        <font style="color:blue private</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  Form1_ClientSizeChanged(</font><font style="color:blue object</font><font style="font-size:11px  sender, EventArgs e) </font></td></tr><tr><td><nobr>100</nobr></td><td style="background-color:rgb(247, 247, 247)         { </td></tr><tr><td><nobr>101</nobr></td><td>            <font style="color:blue this</font><font style="font-size:11px .Invalidate(); </font></td></tr><tr><td><nobr>102</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>103</nobr></td><td>    } </td></tr><tr><td><nobr>104</nobr></td><td style="background-color:rgb(247, 247, 247) } </td></tr></tbody></table>
<hr class=sig>Best regards,

Sergiu

View the full article
 
Back
Top