PDA

View Full Version : آموزش: معرفي و آموزش توابع API



mahboube
دوشنبه 01 شهریور 1389, 10:25 صبح
سلام دوستان
من اين تاپيك رو ايجاد كردم تا هركدوم از دوستان كه از توابع api استفاده كردن،توابع رو به همراه آموزششون اينجا قرار بدن تا همه استفاده كنن.
API مخفف aplication programing interface‌ است كه به معناي رابط برنامه سازي كاربردي مي باشد.
نام api به توابعي اطلاق مي شود كه در فايل هاي مختلف ويندوز مانند user32.dll ،ole32.dll،kernell32.dll,gdi32.dll و ... وجود دارند.
ويدوز براي صد ها كار مختلف خود از اين توابع استفاده ميكند.و برنامه هاي كاربردي نيز به طور متعدد از اين توابع استفاده مي كنند.

mahboube
دوشنبه 01 شهریور 1389, 10:32 صبح
براي شروع خودم تابع BITBLT را معرفي مي ميكنم.


البته من وقت ندارم مفهوما رو بگم ممنون ميشم دوستان ياري كنن!
double-buffering چيست ؟ زمانيکه يک محيط گرافيکي مي سازيد تا درون آن چيزي را ترسيم کنيد ، شما sprite ها / گرافيکها / متن را درون حافظه blit مي کنيد ( offscrean ) سپس نتيجه نهايي را روي صفحه blit مي کنيد . اين عمل از لرزش تصوير يا flickering جلوگيري مي کند ( زماني رخ مي دهد که چندين sprite مستقيماً روي صفحه blit شوند ) و بسيار سريعتر از AutoRedraw است .

تابع BitBlt :
BitBlt تابعي از کتابخانه dll “gdi32” است . اين تابع يک انتقال bit-block از داده هاي مرتبط به يک مستطيل از پيکسلها به يک device context مقصد انجام مي دهد . بعبارت ديگر داده هاي گرافيکي را از محيط گرافيکي ( يک bitmap ) به محيط گرافيکي ديگري ( screen يا يک form ) کپي مي کند . فرم کلي اين تابع بصورت زير است :

[DllImport("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, // handle to destination DC

int nXDest, // x-coord of destination upper-left corner

int nYDest, // y-coord of destination upper-left corner

int nWidth, // width of destination rectangle

int nHeight, // height of destination rectangle

IntPtr hdcSrc, // handle to source DC

int nXSrc, // x-coordinate of source upper-left corner

int nYSrc, // y-coordinate of source upper-left corner

System.Int32 dwRop // raster operation code

);

اولين خط بيان مي کند که ما بوسيله gdi32 DLL به تابع BitBlt دسترسي خواهيم داشت . خطوط ديگر پارامترهايي هستند که اين تابع مي گيرد :
hDestDC : hDC مربوط به محيط مقصد ( اگر مي خواهيد مقصد يک فرم باشد از form.hDC استفاده کنيد و يا اينکه آدرس يک backbuffer را که ساخته ايد بدهيد )
x : مختصات افقي محلي که مي خواهيد گرافيک شما ظاهر شود .
y : مختصات عمدي محلي که مي خواهيد گرافيک شما ظاهر شود .
nWidth : عرض گرافيک شما
nHeight : ارتفاع گرافيک شما
hSrcDC : hDC مربوط به محيط مبدا
xSrc : افست x . 0 زماني استفاده مي شود که بخواهيد از سمت چپترين گوشه گرافيک مبدا عمل blit را انجام دهيد .
ySrc : افست y
dwRop : مد draw اي که در زمان blitting گرافيکتان مي خواهيد استفاده کنيد ( Raster Operations يا ROP ) . اين پارامتر مقادير زير را مي تواند بگيرد :
- vbSrcCopy : داده تصوير مبدا را مستقيماً در مقصد کپي مي کند .
- vbSrcPaint : داده هاي تصاوير مبدا و مقصد را با هم OR مي کند ( pseudo-alphablending effect )
- vbSrcAnd : داده هاي تصاوير مبدا و مقصد را با هم AND مي کند ( pseudo-gamma effect )
- vbSrcInvert : داده هاي تصاوير مبدا و مقصد را با هم XOR مي کند
- vbSrcErase : ابتدا داده تصوير مقصد را invert مي کند سپس آنرا با داده تصوير مبدا AND مي کند .
- vbDstInvert : داده تصوير مقصد را invert مي کند و داده تصوير مبدا را در نظر نمي گيرد .
- vbNotSrcCopy : داده تصوير مبدا را invert مي کند و آنرا مستقيماً در مقصد کپي مي کند .
- vbNotSrcErase : داده تصاوير مبدا و مقصد را OR کرده و نتيجه را invert مي کند .
مثالي از نحوه استفاده:

private Bitmap bitblt_function()
{
System.IntPtr srcDC = GetDC(this.textBox1.Handle);
bm = new Bitmap(this.textBox1.Width, this.textBox1.Height);
Graphics g = Graphics.FromImage(bm);
System.IntPtr bmDC = g.GetHdc();
BitBlt(bmDC, 0, 0, bm.Width, bm.Height, srcDC, 0, 0, 0x00CC0020 /*SRCCOPY*/);
ReleaseDC(this.textBox1.Handle, srcDC);
g.ReleaseHdc(bmDC);
g.Dispose();
return bm;
}


------------------//
private void button1_Click(object sender, EventArgs e)
{
bitblt_function();
pictureBox1.Image = bm;
}

mahboube
سه شنبه 13 مهر 1389, 09:31 صبح
اين يه لينك خيلي خوبه از همين سايت.خيلي از تابع ها رو معرفي كرده.
http://www.barnamenevis.org/forum/showthread.php?t=121103