PDA

View Full Version : سوال: سوال در مورد زایش آرایه ها در c#؟



salamlar
یک شنبه 20 اسفند 1391, 08:07 صبح
بنام خدا

سوال در مورد زایش آرایه ها در c#؟

سلام خسته نباشین
میشه راهنمایی کنین چطوری می تونم خونه های یک ارایه رو افزایش(زایش) بدم .
بدین صورت که مثلا فرض کنین پیکسل های یک تصویر 400*600 رو در یک آرایه دو بعدی ریختم . الان میخوام این آرایه رو از مد [400و600] به مد [1000و1500] گسترشش بدم بطوریکه در خونه های افزوده شده به آرایه میانگین مقادیر خونه های همسایه قرار بگیره (یا یک مقدار خاص) و عکس زیاد از کیفیت نیفته ؟ (و یا آرایه رو به همین روال کوچیکترش کنم)؟

در سی شارپ ابزار و توابعی و... رو سراغ دارین واسه این کار؟؟

خیلی ممنونم

csharpdoost
یک شنبه 20 اسفند 1391, 11:35 صبح
خوب متوجه منظورت نشدم . اگه میخوای طول آرایه رو زیاد کنی با تابع resize میتونی انجام بدی. اگه فقط میخوای اعداد داخل آرایه را تغییر بدی باید از حلقه استفاده کنی و اینکه عدد یه سلول بر حسب عدد همسایش بخواد تغییر کنه اون دیگه برمیگرده به نحوه تعریف فرمول خودت در داخل حلقه.

tooraj_azizi_1035
یک شنبه 20 اسفند 1391, 12:34 عصر
شما باید از ArrayList که با افزودن عنصر به اون ظرفیتش به طور خودکار افزایش پیدا میکنه استفاده کنی:

using System;
using System.Collections;
public class SamplesArrayList {

public static void Main() {

// Creates and initializes a new ArrayList.
ArrayList myAL = new ArrayList();
myAL.Add("Hello");
myAL.Add("World");
myAL.Add("!");

// Displays the properties and values of the ArrayList.
Console.WriteLine( "myAL" );
Console.WriteLine( " Count: {0}", myAL.Count );
Console.WriteLine( " Capacity: {0}", myAL.Capacity );
Console.Write( " Values:" );
PrintValues( myAL );
}

public static void PrintValues( IEnumerable myList ) {
foreach ( Object obj in myList )
Console.Write( " {0}", obj );
Console.WriteLine();
}

}


/*
This code produces output similar to the following:

myAL
Count: 3
Capacity: 4
Values: Hello World !

*/


و این از MSDN:

The capacity of an ArrayList is the number of elements the ArrayList can hold. As elements are added to an ArrayList, the capacity is automatically increased as required through reallocation. The capacity can be decreased by calling TrimToSize (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.trimtosize.aspx) or by setting the Capacity (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.capacity.aspx) property explicitly.

FastCode
یک شنبه 20 اسفند 1391, 12:36 عصر
http://stackoverflow.com/questions/1958297/2d-pixel-array-rotation-and-scaling
http://stackoverflow.com/questions/299267/image-scaling-and-rotating-in-c-c

salamlar
یک شنبه 20 اسفند 1391, 22:51 عصر
خوب متوجه منظورت نشدم . اگه میخوای طول آرایه رو زیاد کنی با تابع resize میتونی انجام بدی. اگه فقط میخوای اعداد داخل آرایه را تغییر بدی باید از حلقه استفاده کنی و اینکه عدد یه سلول بر حسب عدد همسایش بخواد تغییر کنه اون دیگه برمیگرده به نحوه تعریف فرمول خودت در داخل حلقه.


اینکه چطوری به برنامه بگم خونه های اضافی رو بین خونه های قبلی اضافه کنه (مثلا یک در میان یا سه تا رد کن دوتا خونه اضافه کن و ... این جور کارا) هم خودش مسله یی هست

افزایش سایز آرایه با این شرایط که مثلا وقتی آرایه 5 خونه ای رو میکنم 10 خونه ای اون 5 خونه ی اضافه شده یک در میان خونه های قبلی قرار بگیره(راه سادش) و مقداری متوسط و میانگین دو تا همسایه قبل و بعدش رو به خودش بگیره (یا مثلا مقادیر چند همسایه این ور بعلاوه با چند همسایه بعدیش وحتی همسایه های پایین و بالاییش(در آرایه چند بعدی) همش رو با هم جمع کنه و تقسیم بر تعداد کنه و در اون خونه که اضافه شده قرار بده)

5 ,7, 12, 8 ,3 ==>> 5, 6, 7 ,9 ,12 ,10 ,8 ,5 ,3

csharpdoost
دوشنبه 21 اسفند 1391, 10:43 صبح
اینکه چطوری به برنامه بگم خونه های اضافی رو بین خونه های قبلی اضافه کنه (مثلا یک در میان یا سه تا رد کن دوتا خونه اضافه کن و ... این جور کارا) هم خودش مسله یی هست

افزایش سایز آرایه با این شرایط که مثلا وقتی آرایه 5 خونه ای رو میکنم 10 خونه ای اون 5 خونه ی اضافه شده یک در میان خونه های قبلی قرار بگیره(راه سادش) و مقداری متوسط و میانگین دو تا همسایه قبل و بعدش رو به خودش بگیره (یا مثلا مقادیر چند همسایه این ور بعلاوه با چند همسایه بعدیش وحتی همسایه های پایین و بالاییش(در آرایه چند بعدی) همش رو با هم جمع کنه و تقسیم بر تعداد کنه و در اون خونه که اضافه شده قرار بده)

5 ,7, 12, 8 ,3 ==>> 5, 6, 7 ,9 ,12 ,10 ,8 ,5 ,3
این یه مثاله میتونی دیگه بقیه اش رو خودت متناسب با برنامه ات تغغیر بدی:


int d = 5;//تعداد اعدادی که میخواهیم به لیست اضافه شود
ArrayList arrlst = new ArrayList();
arrlst.Add(2);
arrlst.Add(5);
arrlst.Add(8);
arrlst.Add( 11);
arrlst.Add(15);
d += arrlst.Count;
for (int i = 0; i < d - 2; i += 2)// یک در میان و میانگین همسایه ها

arrlst.Insert(i + 1, (Convert.ToInt32(arrlst[i]) + Convert.ToInt32(arrlst[i + 1])) / 2);

salamlar
دوشنبه 21 اسفند 1391, 21:05 عصر
سلام
ممنون از همتون

ولی یک مسله ای که پیشومده اینه که من هم واسه خوندن پیکسلهای تصویر و ریختن شان در آرایه و هم واسه زایش خونه های آرایه(در نهایت باعث تولید تصویر بزرگتر) که از حلقه استفاده می کنم خیلی زمان می بره تا کل عملیات انجام بشه (مثلا واسه یک عکس 800*600 ) و چون عمدتا من باید عکسهای بزرگتر از اینارو هم روشون کار کنم در این حالت و با این زمان زیاد عملا پروژم ناکارامد و غیر بهینه میشه.

حالا به نظرتون من از چه روشی اگر استفاده کنم پروژم بهینه تر میشه و میشه روش حساب وا کرد و در واقعیت هم بکار بردش؟؟؟؟؟؟

FastCode
دوشنبه 21 اسفند 1391, 21:29 عصر
Thread
CUDA
AVX

فقط جون من نپرس اینا چیه
خودت جست و جو کن
Anti Aliasing هم اگر استفاده کنی بد نیست.
برای نمونه سورس Shotwell رو هم بخون.این کار رو انجام میده

C#‎_best_Programmer
دوشنبه 21 اسفند 1391, 21:33 عصر
داشم باید کد نا امن بنویسی و بعد میتونی به اشارگرها دسرسی داشته باشی:بوس:

salamlar
چهارشنبه 23 اسفند 1391, 09:13 صبح
این یه مثاله میتونی دیگه بقیه اش رو خودت متناسب با برنامه ات تغغیر بدی:


int d = 5;//تعداد اعدادی که میخواهیم به لیست اضافه شود
ArrayList arrlst = new ArrayList();
arrlst.Add(2);
arrlst.Add(5);
arrlst.Add(8);
arrlst.Add( 11);
arrlst.Add(15);
d += arrlst.Count;
for (int i = 0; i < d - 2; i += 2)// یک در میان و میانگین همسایه ها

arrlst.Insert(i + 1, (Convert.ToInt32(arrlst[i]) + Convert.ToInt32(arrlst[i + 1])) / 2);



سلام
با تشکر از همه

این کدهارو میشه واسه آرایه دوبعدی هم نوشت(آخه انگار arraylist دو بعدی نداریم)؟؟؟

FastCode
چهارشنبه 23 اسفند 1391, 15:25 عصر
این هم خود جنس
http://ffmpeg.org/doxygen/trunk/swscale_8h.html
http://ffmpeg.org/doxygen/trunk/swscale_8c.html