# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET > سوال: تبديل متن به عكس در vb.net

## milad5843

با سلام

دوستان من برنامه اى دارم مى نويسم كه نياز دارم يه جمله رو كه توى textbox نوشته شده تبديل بكنم به يه picture سياه و سفيد با اندازه مثلا ۸*۳۲ pixel بد هر pixelesh كه سفيد هست را صفر بگيرم و هر كدوم كه سياه 1.

ممنون ميشم راهنمايى كنيد ، من vb.نت كار ميكنم و برنامه vs2008.

با تشكر.

----------


## alimanam

با سلام

فکر کنم این نمونه کد مشکلت رو حل میکنه . یا علی

----------


## milad5843

خيلى على بود ، خدا خیرت بده !

حالا همين image كه توليد ميشه رو بايد برنامه بياد نقاط سياه رو ۱ در نظر بگيره و نقاط سفيد رو ۰ و ستون به ستون بريزه توى يه سرى array ، واسه اون هم راهنمايى كنيد لطفا .

----------


## alimanam

با سلام

دوست عزیز من  , شما هم یکم به خودت زحمت بده علی ماشاا... سورس و منبع در اینترنت موجوده که میتونین باهاش مشکلتون رو حل کنین اگه میخوای یه برنامه نویس خوب بشی زیاد مطالعه کن زیاد سرچ کن و در نهایت اگه مشکلت حل نشد سوال کن همین که به یه مشکل جدید رسیدی زود ناامید نشو . البته من حقیرکوچکتر از اون هستم که کسی رو نصیحت کنم . اگه با کارایی که گفتم نتونستی مشکل رو حل کنی من و دوستان دیگه در خدمتیم . یا علی

----------


## milad5843

خوب اره ! حق با شماست ، من كلا يه هفته است كه vb.نت ياد گرفتم ، واسه همين سنگينِه برنامه نويسى برام هنوز.

پس هر سوالى داشتم از خودت ميپرسم ها !!

سوال اول : تو همين برنامه كه دادى من fontdialog گذشتم ، ميخوام از اون طريق كاربر خودش fonto عوض كُنه ، ولى نميدونم چه جورى وقتى فونت عوض ميشه اعمالش كنم به textbox.

سوال دومى : من يه سرى آراىه دارم و از savedialog هم استفاده كردم تو فرم ، حالا ميخوام اونا رو توى text ام خط به خط save كنم ، چى كار بايد بكنم ؟!

----------


## alimanam

با سلام

سوال اولت که واضح بود در فایل ضمیمه میتونی کدش رو ببینی سوال دومت خیلی مبهمه بیشتر توضیح بده . یا علی

----------


## milad5843

با سلام
نميدونم چرا بعضى وقتها كه فونت عوض ميشه تو picturebox اعمال نميشه ، به هر حال...

ببين من بايد دوتا حلقۀ تو در تو for بنويسم با دستورِ getpixel فكر كنم.
مثكه اين دستورِ نشون دهندهِ رنگ اون axie كه از برنامه اى كه شما گذاشتين توليد ميشه ، بد عددِ رنگ هر pixel در مياد، حالا اون adada رو من نسبت ميدم به يه آراىه ، مثلا ۸*۳۲ هستش یعنی 8 تا ستون داريم ، كه codesh ميشه يه هم چين چيزى : &hF6 حالا اينا رو ميدم به آراىه ها و آراىه ها بايد خط به خط بره توى text و save بشه .

الان مشكل سر اينه كه چه جورى آراىه ها جمع ميشن تو text؟ من فقط قسمت savedialog رو بلدم.

----------


## shask00l

دوست عزیز
برای اون دوتا حلقه ای که گفتی ... باید به تعداد سطر و ستون تصویرت باشه با getpixel یا فرمانی شبیه به این باید pixel هارو بخونی و توی یه آرایه با همین سایز بصورت boolean ذخیره کنی . بعد این آرایه رو بصورت باینری با کمک یک stream توی فایل بنویسی . در مورد stream ها هم به اندازه ی کافی توی این سایت بحث شده .

امیدوارم که منظورت رو درست متوجه شده باشم .

----------


## alimanam

با سلام

این هم رنگ تک تک پیکسل های تصویر بقیه اش رو سعی کن خودت ..... یا علی

----------


## milad5843

سلام داش چطورى ؟!

امروز با كوله بارى از سؤالات اومدم ، اما قبلش نرم افزاریو كه دارم طراحى ميكنم ببين ، اين نرم افزار بايد بتونه كدِ هاى hexe تابلو روانی كه ساختم رو توليد بكنه.

پيشنهادى انتقادى چيزى دارى بده.

اما سؤالات :
1-من ميخوام textbox هايى كه ميبينى محدود بشه ، یعنی مثلا فقط بشه توش ۱۰ حرف نوشت ، و جلوش هم بزنِ فرضا : "۶ characters left"

2-يه مشكلِ بزرگ تو برنامه اى كه دادى بهم اينه كه اگه picturi كه توليد ميشه توى realese رو بزرگش كنى ميبينى عكس كامل سياه نيست ، یعنی طیف هاى مختلفى توش هست ، ولى من سياه خالص ميخوام.

3-icon اى كه كاربر روش كليك ميكنه كه برنامه باز شه رو چه جورى بايد عوضِش كنم ؟

4-قسمت وارد كردن تصاوير و نگاه ، ميخوام عكس كه وارد شد توى textboxesh آدرسِ ورودی بياد

5-ميخوام يه عكس متحرکه "gif" فرضا با ۳ تا frame ، تبديل بشه به يه عكسِ bitmap كه سه تا frame رو توى خودش درِ ، یعنی به ترتيب از چپ به راست اوايلِ frame ۱ هستش بد بدونِ فاصله frame ۲ هست و بعدش ۳ كه قاعدتاَ طول عكس ۳ برابر ميشه.

6-من اين codi كه پائين میبینیو نوشتم كه يه text رو كه مينويسه user تبديل بشه به 7ta عكس بغلِ هم (7ta عكس تو يه عكس ميخوام باشه نه اينكه ۷ تا فايل توليد بشه) با point هاى مختلف ولى متاسفانه فقط مورد آخرى save ميشم ، چى كارش بايد بكنم ؟




    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click

        Dim Text As String = TextBox4.Text 'tayin mikonad ke ma neveshte mikhahim
        Dim FontColor As Color = Color.Black 'range neveshteye ax
        Dim BackColor As Color = Color.White 'range bg ax
        Dim FontName As String = "tahoma" 'font ax
        Dim FontSize As Integer = andaze(4) 'size fonte ax
        Dim Height As Integer = 8 'arze ax be pixel
        Dim Width As Integer = 256 'toole ax be pixel
        Dim objBitmap As New Bitmap(Width, Height) 'moteghayerist ke sizash width o height ast
        Dim objGraphics As Graphics = Graphics.FromImage(objBitmap)
        Dim objColor As New Color
        Dim objFont As New Font(FontName, FontSize)
        Dim objBrushForeColor As New SolidBrush(FontColor)
        Dim objBrushBackColor As New SolidBrush(BackColor)
        Dim x As Integer


        For y(4) = -7 To 0
            Select Case y(4)
                Case -7 : x = 0
                Case -6 : x = 32
                Case -5 : x = 64
                Case -4 : x = 96
                Case -3 : x = 128
                Case -2 : x = 160
                Case -1 : x = 192
                Case 0 : x = 224
            End Select
            Dim objPoint As New PointF(x, y(4))



            objGraphics.FillRectangle(objBrushBackColor, 0, 0, Width, Height)
            objGraphics.DrawString(Text, objFont, objBrushForeColor, objPoint)
        Next
        objBitmap.Save(Application.StartupPath & "\step4" & ".bmp", ImageFormat.Bmp)

    End Sub



خيلى ممنون ميشم حتى اگه حال داشته باشى سوالارو بخونى چه برسه به جواب !!

----------


## shask00l

خسته نباشيد دوست عزيز
پيشنهاد ميكنم قبل از پست كردن سوالات قوانين سايت رو مطالعه كنيد .
براي اينكه سريعتر به جوابتون برسيد هر سوال رو در يك تاپيك مجزا مطرح كنيد .




> 1-من ميخوام textbox هايى كه ميبينى محدود بشه ، یعنی مثلا فقط بشه توش ۱۰ حرف نوشت ، و جلوش هم بزنِ فرضا : "۶ characters left"


اين كار رو قبل از اينكه متن رو به تصوير تبديل كنيد بايد انجام بديد . با كمك توابع رشته اي متن رو به قسمتهايي كه دوست داريد تقسيم كنيد




> 2-يه مشكلِ بزرگ تو برنامه اى كه دادى بهم اينه كه اگه picturi كه توليد ميشه توى realese رو بزرگش كنى ميبينى عكس كامل سياه نيست ، یعنی طیف هاى مختلفى توش هست ، ولى من سياه خالص ميخوام.


براي تغيير فرمت عكس (سياه و سفيد كردن عكس) توابع آماده اي وجود داره البته خودتون هم ميتونيد بنويسيد . زياد سخت نيست . كلا براي كار روي تصوير ميتونيد از codeproject مثال هاي خوبي پيدا كنيد.




> 3-icon اى كه كاربر روش كليك ميكنه كه برنامه باز شه رو چه جورى بايد عوضِش كنم ؟


 :افسرده:  به پنجره ي project properties سري بزنيد . دلش براتون تنگ شده .




> 4-قسمت وارد كردن تصاوير و نگاه ، ميخوام عكس كه وارد شد توى textboxesh آدرسِ ورودی بياد


اين سوالتون خيلي نا مفهوم بود .




> 5-ميخوام يه عكس متحرکه "gif" فرضا با ۳ تا frame ، تبديل بشه به يه عكسِ bitmap كه سه تا frame رو توى خودش درِ ، یعنی به ترتيب از چپ به راست اوايلِ frame ۱ هستش بد بدونِ فاصله frame ۲ هست و بعدش ۳ كه قاعدتاَ طول عكس ۳ برابر ميشه.


داستان تصاوير متحرك gif كلا با تصاوير استاتيك فرق ميكنه . براي كار با اين تصاوير هم پيشنهاد ميكنم از ابزار هاي آماده استفاده كنيد .

موفق باشيد

----------


## milad5843

> خسته نباشيد دوست عزيز
> پيشنهاد ميكنم ......


دوستِ عزيز ممنون بابتِ جواب ولى با كمالِ احترام فقط جواب سوال سوم رو شما دادين.

در مورد سوال اول :
اصلا من كارى به تبديل و اينا ندارم ، فقط ميخوام تو textbox فقط و فقط بشه مثلا ۱۰ حرف نوشت.

در مورد سوال دوم :
merC !! قاعدتاَ تو اينترنت ميشه مثال هاى خوبى پيدا كرد !!!!!!!!!!!!!!

در مورد سوال سوم :
عالى بود ، كمك خوبى كرديد .

در مورد سوال چهارم :
من ميخوام عكسى كه user با يه button وارد ميكنه ، تو textbox آدرسش نوشته بشه ، یعنی بنویسه مثلا : c:/01.jpg

و در مورد سوال پنجم :
خوب اينكه بايد از يه ابزارى استفاده كنم كه واضحِه !!! از چه دستورى ، چه شیئ آخه .....؟

----------


## shask00l

> در مورد سوال اول :
> اصلا من كارى به تبديل و اينا ندارم ، فقط ميخوام تو textbox فقط و فقط بشه مثلا ۱۰ حرف نوشت.


اگر منظورتون توی همون textbox که متن اولیه رو وارد میکنید هستش با کمک رویداد keydown میتونید تعداد کاراکتر های وارد شده رو در هر لحظه کنترل کنید .فکر میکنم پروپرتی هم در این زمینه وجود داشته باشه .

اما اگر منظورتون متنیه که قراره به تصویر تبدیل بشه با کمک توابع left , right میتونید به راحتی هر تعداد کاراکتر که دوست دارید از رشته جدا کنید . قبلا گفته بودم .



> در مورد سوال دوم :
> merC !! قاعدتاَ تو اينترنت ميشه مثال هاى خوبى پيدا كرد !!!!!!!!!!!!!!


در مورد این سوال باید عرض کنم که منم چیزی در این مورد نمیدونستم ولی همونطور که شما گفتید توی اینترنت مثال های خوبی پیدا میشه . من هم search کردم .

http://www.codeproject.com/KB/graphi...grayscale.aspx
http://www.codeproject.com/KB/graphics/pjaimage.aspx



> در مورد سوال سوم :
> عالى بود ، كمك خوبى كرديد .


خواهش میکنم قابلی نداشت  :خجالت: 




> در مورد سوال چهارم :
> من ميخوام عكسى كه user با يه button وارد ميكنه ، تو textbox آدرسش نوشته بشه ، یعنی بنویسه مثلا : c:/01.jpg


من برنامتون رو کاملا بررسی نکردم ولی فکر کنم با openfiledialog فایل رو انتخاب میکنید . اگر اینطور باشه خود دایالوگ مسیر و نام فایل رو بصورت دو تا پروپرتی در اختیارتون قرار میده .
در غیر این صورت هم ...........  :متفکر:  خلاصه برنامه شما تصویر رو با کمک مسیرش بار گذاری میکنه . ببینید کجا این کار انجام میشه . بعد از همون جا مقدار textbox مربوطه رو set کنید .



> و در مورد سوال پنجم :
> خوب اينكه بايد از يه ابزارى استفاده كنم كه واضحِه !!! از چه دستورى ، چه شیئ آخه .....؟


یه نگاه به لینک زیر بندازین . (گوگل و codeproject دوستان خوبی هستند . قدرشونو بدونید)

http://www.codeproject.com/info/sear...w=animated+gif
ضمنا .. اگر شوخ طبعیه من باعث ناراحتیتون شد . عذر خواهی میکنم .

----------


## milad5843

نه داش ، اين حرفها چيه .

آقا كسى نيست جواب دقيق ترى به سوال ها بده ؟

alimanam kojayiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

----------


## milad5843

> سلام داش چطورى ؟!
> 
> امروز با كوله بارى از سؤالات اومدم ، اما قبلش نرم افزاریو كه دارم طراحى ميكنم ببين ، اين نرم افزار بايد بتونه كدِ هاى hexe تابلو روانی كه ساختم رو توليد بكنه.
> 
> پيشنهادى انتقادى چيزى دارى بده.
> 
> اما سؤالات :
> 1-من ميخوام textbox هايى كه ميبينى محدود بشه ، یعنی مثلا فقط بشه توش ۱۰ حرف نوشت ، و جلوش هم بزنِ فرضا : "۶ characters left"
> 
> ...


لطفا کمک کنید !!

----------


## alimanam

با سلام

درابتدا معذرت خواهی بابت اینکه نمی تونستم به سایت سربزنم ( مشکلات شغلی )

دوست عزیز انگار به حرف های من زیاد توجه نکردی خداوکیلی چنددقیقه وقت صرف کردی تا سوالات رو آماده کنی و چنددقیقه صرف حل سوالات مبتدی وساده ایی که پرسیدی کردی ؟؟؟

جواب سوال اول :

درویژگیهای کنترل Textbox دنبال ویژگی MaxCharacter یا MaxLenghtبگرد و عدد مورد نظرت رو وارد کن( من سرکار VS نصب شده نداشتم )

سوال دوم :

کاملاً متجه نشدم اگه منظورت اینکه که نمی خوای هیچگونه پیکسلی به غیر از سیاه و سفید در عکست پیاده بشه از متد SetPixcel آبجکت Bitmap میتونی استفاده کنی .

سوال سوم : که دوست عزیز جواب دادن 

سوال چهارم :

از کد زیر استفاده کن یه دکمه برای لود عکس روی فرم بزار و در رویداد کلیک اون از کد زیر استفاده کن البته من چون vs نداشتم تا اونجایی که حافظه ام اجازه میداد کد نویسی کردم خودت چکش کن .
Dim ofd as new openfiledialog
ofd.filter = "Bitmap|*.bmp;Jpeg|*.jpg"
if ofd.showdialog = system.windows.forms.dialogresult.OK Then
 Textbox1.Text = ofd.filename
End if

جواب سوالهای 5- 6 رو هم وقت بزار ( بیشتر از چند ثانیه لطفاً اگه نتونستی و اگه زنده بودم بار بعدی که اومدم نت ( شاید یکم طولانی بشه ببخشید چون واقعاً سرم شلوغه ) تا جایی که تونستم کمکت می کنم البته اساتید محترم هم کمکت می کنن .

موفق باشید . یا علی

----------


## milad5843

> دوست عزیز انگار به حرف های من زیاد توجه نکردی خداوکیلی چنددقیقه وقت صرف کردی تا سوالات رو آماده کنی و چنددقیقه صرف حل سوالات مبتدی وساده ایی که پرسیدی کردی ؟؟؟


سلام ، خيلى ممنون از وقتى كه ميذارى.

من رشته ام الكترونيك بوده و يه ۳ واحدى برنامه نویسی "c" پاس كرديم ، من basic رو هم از روى ميكرو بلدم تازه ، يه ماهه پيش در عرضِ يك هفته يه كتاب vb.نت رو خوندم ، ميگى چى كار كنم ديگه ؟!!

الان بيشتر مشكلم سوال دوم هستش ، من setpixel رو تست كردم ولى اون چيزى كه من ميخوام نيست ، من میخوام عکسی كه توليد ميشه تك بيتى باشه يعنى يا سياه باشه پیکسلاش يا سفيد . مثلا اون برنامه اى كه شما گذشتى و من بسطش دادم عكسى كه توليد ميكنه اين عکسیه كه پائين ميبينى ، اگه از ماكزيمم zoom استفاده كنى ميبينى كه عكس پیکسلاش سياه نيست ، از رنگ هاى مختلفى تشكيل شده .

----------


## sanaz yousefi

سلام من سورس بازی منچ vb.net می خواستم عجله دارم لطفا کمکم کنید ممنون

----------

