PDA

View Full Version : تقسیم عکس



sobhangh
دوشنبه 02 آذر 1388, 21:28 عصر
سلام
میخوام برنامه ام وقتی عکسی رو اپن می کنه اون را به نه قسمت مساوی تقسیم کنه و هر قسمت را توی یک image قرار بده.
اگه ممکنه دوستان کمک کنند.
اگر فرمت عکس هم مهمه دوستان بهم بگن.

sobhangh
سه شنبه 03 آذر 1388, 17:05 عصر
دوستان اگر کسی می دونه راهنمایی کنه.
می خوام برنامه عکس رو تقسیم کنه و هر قسمت را توی یک image بگذاره.
تاحالا همه حالی رو که وقتی جواب سوالی رو نمیدونند تجربه کردند پس لطفا سریعتر جوب بدهید.
با تشکر

Hamid.Kad
سه شنبه 03 آذر 1388, 17:40 عصر
کلاس TBitMap یک تابع داره بنام ScanLine که یک خط را از تصویری که توش لود شده میخونه. هر پیکسل رو در سه بایت میخونه که هر بایتش به ترتیب میزان رنگ قرمز، سبز و آبیه (RGB). مثلاً اگه پهنای تصویر 100 باشه خط اول از تصویر در یه آرایه یک بعدی 300 سلولی ذخیره میشه. حالا شما میتونید خونه های این آرایه رو توی پیکسلهای یه Bitmap جدید قرار بدید. خیلی مختصر گفتم. اگه درست نشد بفرمائید مثالش رو براتون بنویسم.
فرض کنید سطر اول رو توی آرایه P خونده باشیم. در اینصورت اولین پیکسل از تصویر برابر هست با:

Bmp1.Canvas.Pixels[0]=RGB(P[2],P[1],P[0]);

alinikaein
سه شنبه 03 آذر 1388, 23:37 عصر
سلام دوست عزيز؛

از راهنماي دلفي، دستورات BrushCopy و StretchDraw و Draw را نگاه كنيد.
در صورتي كه متوجه نشديد، بگيد تا من يا دوستان، بيشتر توضيح بديم...


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

mossaferin
چهارشنبه 04 آذر 1388, 10:03 صبح
سلام
یه نگاهی هم به دستور copyrect بنداز برای اینکاری که می خوای انجام بدی ، راحتترین و سریعترینه

موفق باشی

دلفــي
چهارشنبه 04 آذر 1388, 11:43 صبح
http://barnamenevis.org/forum/showthread.php?t=189356

sobhangh
چهارشنبه 04 آذر 1388, 18:30 عصر
سلام با تشکر
در جواب دوست اول: منظورتون این بود که عکس رو رنگ رنگ می کنه؟ یعنی این کد شما عکس رو رنگ رنگ جدا میکرد؟ راستش درست متوجه نشدم پس اگه ممکنه بیشتر تویح بدید؟
دوستان دیگه هم گفته بودن برم توی Help صادقانه بگم help ارور داد گویا این قسمتش خرابه و نمی تونست بخونه! شانس دیگه!
دوست دیگه ای که برنامه گذاشته بودند هم که عکس رو تیکه کردند. و برای تیکه کردن سایز داده بودن. من که نمی دونم عکس به چه سایزی اپن می شه تازه سوال من این بود که قرار 9 قسمت بشه و هر قسمت توی یک عکس قرار بگیره؟
با تشکر از دوستان.
منتظر پاسخ شما استادان.

Hamid.Kad
شنبه 07 آذر 1388, 17:51 عصر
در جواب دوست اول: منظورتون این بود که عکس رو رنگ رنگ می کنه؟
یه مثال میزنم امیدوارم کمک کنه. کد زیر رو ملاحظه بفرمائید:

P:PByteArray;
for i:=0 to (mainIMG.height div 3) do
begin
p:=MainIMG.ScanLine[I];
for j:=0 to (MainIMG.Width div 3) do
begin
NewIMG.Canvas.Pixels[i,j]:= RGB(p[3*j+2],P[3*j+1],P[3*j]);[
end;
end;

در حقیقت با این دستورات از هر سطر عکس، پیکسلها خونده میشن. مثلاً به ازای اولین پیکسل گوشه سمت چپ بالا سه تا خونه آرایه P پُر میشه. یکی میزان رنگ قرمز، یکی سبز و دیگری هم میزان رنگ آبی این پیکسل رو نشون میدن. حالا توی تصویر جدید (NewIMG) این سه تا رنگ رو با تابع RGB ترکیب کرده و دوباره توی تصویر جدید میریزیم. با اجرای این دستورات اگر فرض کنیم که قرار باشه عکس اصلی به 9 تا عکس (3*3) تبدیل بشه، عکس گوشه سمت چپ بالا استخراج میشه (توی NewIMG)

البته احتمالاً روشهای ساده تری هم وجود داره. چیزی که به ذهن من رسید این روش بود. امیدوارم مفید بوده باشه.

alinikaein
یک شنبه 08 آذر 1388, 20:28 عصر
استفاده از روشي كه آقاي حميد.كد گفتند، سرعت كمي داره به خاطر اين كه با پيكسل‌ها كار مي‌كنه.

در مورد كدي كه دوست خوبم، آقاي/خانم دلفي نوشته بودند، كافيه شما به جاي ابعادي كه ايشون دادند، يه متغير قرار بديد كه مقدار اون را هنگامي كه تصوير را لود مي‌كنيد، به صورت زير انتساب بديد:

MyWidth := LoadedImage.Width div 3;
MyHeight := LoadedImage.Height div 3;

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

sobhangh
جمعه 13 آذر 1388, 09:51 صبح
سلام
p:=MainIMG.ScanLine[i];

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

Hamid.Kad
جمعه 13 آذر 1388, 14:50 عصر
چه خطایی میده ؟