PDA

View Full Version : سوال: ساخت تصویر با استفاده از پیکسل ها



mohammadali1375
جمعه 06 بهمن 1391, 19:19 عصر
سلام.
من چند وقته سعی میکنم برای کنکت روی ویندوز برنامه بنویسیم. تمام برنامه هایی که توی مثال های خود ماکروسافت و یا آموزش های موجود هست با استفاده از wpf نوشته شده. روی wpf مشکلی ندارم چون کلی کلاس و ... برای کار با تصاویر هست ولی وقتی میخام یه برنامه برای windows form بسازم مشکلات شرو میشه. توی wpf میشه با کلاس WriteableBitmap یک تصویر ساخت و تصویر رو توی یک Image نشون داد. اما توی form فقط یه Bitmap داریم که چیز خاصی نتونستم توش پیدا کنم که بشه یک تصویر bitmap ساخت. حالا یه کاری کردم که به نظر خودم درست نیست.
با ایپمورت کردن PresentationFramework به پروژه میتونم از WriteableBitmap استفاده کنم و تصویر رو بسازم ولی نمیشه اون رو توی Bitmap قرار داد تا به یک پیکچر باکس توی فرم داد. اصلا فکر کنم نباید این کار رو هم میکردم. خلاصه من الان یک آرایه از بایت ها که پیکسل های تصویر هستند رو دارم ولی نمیدونم چجوری با این پیکسل ها یک تصویر درست کنم :ناراحت: .

mohammadali1375
جمعه 06 بهمن 1391, 20:36 عصر
خودم فهمیدم. اینطوری میشه

private System.Drawing.Bitmap BitmapFromSource(BitmapSource bitmapsource)
{
System.Drawing.Bitmap bitmap;
using (System.IO.MemoryStream outStream = new System.IO.MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();

enc.Frames.Add(BitmapFrame.Create(bitmapsource));
enc.Save(outStream);
bitmap = new System.Drawing.Bitmap(outStream);
}
return bitmap;
}

ولی اینطوری خیلی کنده . راه دیگه ای نداره ؟ :متفکر:

the king
جمعه 06 بهمن 1391, 21:50 عصر
سلام.
من چند وقته سعی میکنم برای کنکت روی ویندوز برنامه بنویسیم. تمام برنامه هایی که توی مثال های خود ماکروسافت و یا آموزش های موجود هست با استفاده از wpf نوشته شده. روی wpf مشکلی ندارم چون کلی کلاس و ... برای کار با تصاویر هست ولی وقتی میخام یه برنامه برای windows form بسازم مشکلات شرو میشه. توی wpf میشه با کلاس WriteableBitmap یک تصویر ساخت و تصویر رو توی یک Image نشون داد. اما توی form فقط یه Bitmap داریم که چیز خاصی نتونستم توش پیدا کنم که بشه یک تصویر bitmap ساخت. حالا یه کاری کردم که به نظر خودم درست نیست.
با ایپمورت کردن PresentationFramework به پروژه میتونم از WriteableBitmap استفاده کنم و تصویر رو بسازم ولی نمیشه اون رو توی Bitmap قرار داد تا به یک پیکچر باکس توی فرم داد. اصلا فکر کنم نباید این کار رو هم میکردم. خلاصه من الان یک آرایه از بایت ها که پیکسل های تصویر هستند رو دارم ولی نمیدونم چجوری با این پیکسل ها یک تصویر درست کنم :ناراحت: .

اگه اون آرایه از بایت ها شامل هدر تصویر (مشخصات فایل تصویر، ابعاد، عمق رنگ، جدول رنگ و ...) هم میشه :

byte[] bytes = your array;
Bitmap bmp = new Bitmap(new System.IO.MemoryStream(bytes));


اما اگه فقط داده رنگ داخل پیکسل ها است و ابعاد و عمق رنگ اش رو از جای دیگری می خوانید یا می دونید :

using System.Runtime.InteropServices;
using System.Drawing.Imaging;



byte[] bytes = your array;
GCHandle gch = GCHandle.Alloc(bytes, GCHandleType.Pinned);
IntPtr ptr = gch.AddrOfPinnedObject();
Bitmap bmp = new Bitmap(width, height, width * 4, PixelFormat.Format32bppArgb, ptr);
gch.Free();

mohammadali1375
جمعه 06 بهمن 1391, 23:11 عصر
:متفکر: اینطوری یکم سخت شد. الان با اون تابعی که نوشتم میشه با پیکسل ها تصویر درست کرد ولی سیستم کم میاره اینجوری.
نمیشه یه کاری کرد تصویر بدون دنگ و فنگ ساخته بشه ؟ مثل کاری که تو wpf با WriteableBitmap انجام میشه ؟

the king
شنبه 07 بهمن 1391, 00:15 صبح
:متفکر: اینطوری یکم سخت شد. الان با اون تابعی که نوشتم میشه با پیکسل ها تصویر درست کرد ولی سیستم کم میاره اینجوری.
نمیشه یه کاری کرد تصویر بدون دنگ و فنگ ساخته بشه ؟ مثل کاری که تو wpf با WriteableBitmap انجام میشه ؟
پیشنهاد می کنم کاری که می خواهید انجام بدهید رو بنویسید، یعنی بگید بایت های تصویر رو قراره از چه طریقی ایجاد کنید، منبعی که
این پیکسل ها رو مشخص می کنند چی هستند و ... وگرنه ساختن Bitmap از بایت ها که کلا دو خط کد بیشتر نبود.

mohammadali1375
شنبه 07 بهمن 1391, 16:10 عصر
پیکسل هارو کینکت میده و از این که میده هم مطمعنم چون با XNA تصویر رو از همین پیکسل ها ساختم و روی مانیتور نشون دادم.
ترتیبش هم به ای صورته :
pixel[0] = BlueColor
pixel[1] = GreenColor
pixel[2] = RedColor
pixel[3] = null
این چهار تا بایت رنگ یک پیکسل رو مشخص میکنه. برای مثال در یک صفحه ی 640*480 تعداد بایت ها دقیقا برابر 640*480*4 هست

mohammadali1375
شنبه 07 بهمن 1391, 21:19 عصر
ببخشید اینجا اینقدر فعاله ادم مجبور میشه اسپم بده تایپک برگرده صفحه اول :ناراحت: