using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace SHADER
{
///
/// This is the main type for your game
///
partial class Game1 : Microsoft.Xna.Framework.Game
{
private Texture2D _Texture;
private SpriteBatch _SpriteBatch;
private Vector2 _Position;
public Game1()
{
InitializeComponent();
System.Drawing.Font _FONT = new System.Drawing.Font("Arial", 24.0f);
System.Drawing.Graphics _GRAPHICS = System.Drawing.Graphics.FromHwnd(Window.Handle);
System.Drawing.SizeF _SIZE = _GRAPHICS.MeasureString("هذه لغتي المفضلة ", _FONT);
_GRAPHICS.Dispose();
System.Drawing.Bitmap _BITMAP = new System.Drawing.Bitmap((int)_SIZE.Width, (int)_SIZE.Height);
_GRAPHICS = System.Drawing.Graphics.FromImage(_BITMAP);
_GRAPHICS.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
_GRAPHICS.DrawString("هذه لغتي العربية المفضلة", _FONT, System.Drawing.Brushes.White,
new System.Drawing.PointF(0, 0));
_GRAPHICS.Dispose();
System.IO.MemoryStream _STREAM = new System.IO.MemoryStream();
_BITMAP.Save(_STREAM, System.Drawing.Imaging.ImageFormat.Png);
_BITMAP.Dispose();
_STREAM.Position = 0;
_Texture = (Texture2D)Texture2D.FromFile(graphics.GraphicsDevice, _STREAM);
_STREAM.Dispose();
_SpriteBatch = new SpriteBatch(graphics.GraphicsDevice);
_Position = new Vector2(10, 10);
}
public override void Update(GameTime gameTime)
{
// TODO: Add your update code here
float elapsed = (float)ElapsedTime.TotalSeconds;
// TODO: Add your game logic here
// Let the GameComponents update
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
if (!graphics.EnsureDevice())
return;
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
graphics.GraphicsDevice.BeginScene();
// TODO: Add your drawing code here
_SpriteBatch.Begin(SpriteBlendMode.AlphaBlend);
_SpriteBatch.Draw(_Texture, _Position, Color.Black);
_SpriteBatch.End();
// Let the GameComponents draw
graphics.GraphicsDevice.EndScene();
graphics.GraphicsDevice.Present();
// TODO: Add your drawing code here
base.Draw(gameTime);
}
}
}
أما في 04 نيسان 2009 02:59 م، فقد تنهد عمر سمير بارتياح وهو يرد:
وقد ظهرت لي اخطاء حاولت تجنب المشكلة ولكني لم استطع ان احل المشكلةبتاريخ 04 ابريل 2009 07:24 ص، قطب مؤيد مارديني حاجبيه بشدة وهو يقول:
الكود الذي أرفقته *لا* يقوم بما قلته (أخذ الأحرف من صور PNG شفافة) بل هو يستعمل خدمات +GDI للكتابة بشكل مباشر.وفي 04 ابريل 2009 07:29 ص، أعرب عمر سمير عن رأيه بالموقف كالآتي:
مشكلتي هي لا يجب ان يأخذ المعامل GDI+في 04 ابريل 2009 07:29 ص، قال عمر سمير بهدوء وتؤدة:
وهذا هو الخطأ : الذي ظهر لي فقطوفي 04 نيسان 2009 03:38 م، أعرب وسام البهنسي عن رأيه بالموقف كالآتي:
هذا يعني أن توضـّع النص في الصورة سيكون مخالفاً للتوقعاتوفي 04 ابريل 2009 08:52 ص، قال عمر سمير متحمساً:
وضعتها لكي اجد المترجم يلاحظها كما هي او يكتبها بجانبها ( هذا هو القصد )private SpriteFont GDI_Font; // متغير اسم الخطوط
private Texture2D fontArabic; // متغير صورة الخطوط او الكلمات
private Texture2D fontArabicEffect; //متغير تأثيرات الخطوط للصورة
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// هنا نضع جميع الخطوط العربية
GDI_Font = Content.Load("Fonts/GDI_Font");
// هنا نضع صور للكلمات العربية
fontArabic = Content.Load("fontarabic\شاشة البدء");
fontArabicEffect = Content.Load("FontArabic2/شاشة التأثيرات");
}
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
DrawGDI_Font();// هنا نعرف مكان الرسم للخطوط العربية
base.Draw(gameTime);
}
private void DrawGDI_Font()
{
Vector2 GDI_FontLocation = new Vector2(String.X, String.Y);// نضع مكان النص على الشاشة
DrawShadowedString(GDI_Font, timeString, GDI_FontLocation, timeColor); هنا نضع الظل للخطوط
}
private void DrawShadowedString(SpriteFont GDI_Font, string value, Vector2 position, Color color)
{
spriteBatch.DrawString(GDI_Font, value, position + new Vector2(1.0f, 1.0f), Color.Black);// اللون والمكان
spriteBatch.DrawString(GDI_Font, value, position, color); // نعرف النوع والمكان واللون للرسم
}
في 09/ربيع الثاني/1430 10:48 ص، غمغم عمر سمير باستغراب قائلاً:
انني اقترح كتابة النصوص العربية عن طريق الصور PNG بحيث تكون شفافة للمظهر الخارجيبتاريخ 09/ربيع الثاني/1430 10:48 ص، قطب عمر سمير حاجبيه بشدة وهو يقول:
بذلك الأبتكار الجديد لــ XNA فقط باللغة العربية .....