PDA

View Full Version : تغيير رنگ يک ناحيه از تصوير



programer1389
شنبه 22 شهریور 1393, 13:32 عصر
سلام
يک تصوير قراني دارم که ميخواهم از نقطه (x1,y1) تا نقطه (x2,y2 ) را از رنگ مشکي به رنگ قرمز تبديل کنم لطفا راهنمايي کنيد

programer1389
شنبه 22 شهریور 1393, 13:49 عصر
کدي که من نوشتم اينه ايا مشکلي داره؟
byte[] arrPic0 = (byte[])(dt.Rows[0]["PageBMP"]);
MemoryStream ms0 = new MemoryStream(arrPic0);
Bitmap BMP = new Bitmap(Image.FromStream(ms0));


Color col;
int r, g, b, rgb;
byte blue, green, red;
MessageBox.Show((BMP.Width.ToString()) + " " + BMP.Height.ToString());
for (int i =100; i < 462; i++)//Int32.Parse(BMP.Width.ToString())
{
for (int j = 300; j < 690; j++)//Int32.Parse(BMP.Height.ToString())
{
col = BMP.GetPixel(i, j);
blue = col.B;
green = col.G;
red = col.R;
if (red < 128)
{
BMP.SetPixel(i, j, Color.FromArgb(100, 0, 0));
}
if (red >= 128)
{
BMP.SetPixel(i, j, Color.FromArgb(255, 255, 255));
}
}
}
pictureBox_aye.Image = BMP;

rahnema1
شنبه 22 شهریور 1393, 14:51 عصر
سلام،
اگه بتونید یکی از تصاویر را به صورت فایل rar اینجا بذارید

programer1389
شنبه 22 شهریور 1393, 21:24 عصر
سلام
متشکرم بفرمایید

rahnema1
شنبه 22 شهریور 1393, 23:05 عصر
این را امتحان کنید


int x1=100,x2=462,y1=300,y2=690;
ImageAttributes imageAttributes = new ImageAttributes();
float[][] colorMatrixElements = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {1f, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);

Graphics.FromImage(BMP ).DrawImage( BMP ,new Rectangle(x1,y1,x2-x1,y2-y1), x1,y1,x2-x1,y2-y1, GraphicsUnit.Pixel, imageAttributes);
pictureBox_aye.Image = BMP;

programer1389
شنبه 22 شهریور 1393, 23:54 عصر
تصویر جدید اینجور شد

rahnema1
یک شنبه 23 شهریور 1393, 10:52 صبح
این هم یه رقم دیگه

int x1=100,x2=462,y1=300,y2=690;
Bitmap BMP2= new Bitmap(x2-x1,y2-y1 );
Color lowerColor = Color.FromArgb(200,200,200);
Color upperColor = Color.FromArgb(255,255,255);
ImageAttributes imageAttributes = new ImageAttributes();
float[][] colorMatrixElements = {
new float[] {1, 1, 1, 0, 0},
new float[] {1, 1, 1, 0, 0},
new float[] {1, 1, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {1, -.35f, -.35f, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix( colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
Graphics.FromImage(BMP2 ).DrawImage( BMP ,new Rectangle(0,0,x2-x1,y2-y1), x1,y1,x2-x1,y2-y1, GraphicsUnit.Pixel, imageAttributes);
imageAttributes = new ImageAttributes();
imageAttributes.SetColorKey(lowerColor, upperColor, ColorAdjustType.Default);
Graphics.FromImage(BMP ).DrawImage( BMP2 ,new Rectangle(x1,y1,x2-x1,y2-y1), 0,0,x2-x1,y2-y1, GraphicsUnit.Pixel, imageAttributes);
pictureBox_aye.Image = BMP;

programer1389
یک شنبه 23 شهریور 1393, 22:50 عصر
سلام
ممنون من میخواستم یک ایه که در چندخط هست انتخاب کنم برای این کار چکار کنم و بقیه ایه ها انتخاب نشود

rahnema1
دوشنبه 24 شهریور 1393, 11:22 صبح
سلام
ممنون من میخواستم یک ایه که در چندخط هست انتخاب کنم برای این کار چکار کنم و بقیه ایه ها انتخاب نشود

شما باید برای هر آیه تا حداکثر 3 تا مستطیل از قبل پیش بینی کرده باشید
یک مستطیل برای خط بالایی
یک مستطیل برای خطوط میانی و
یک مستطیل برای خط پایانی
یعنی مثلا ممکنه لازم باشه برای هر آیه مختصات مستطیل مورد نظر را ذخیره کرده باشید و سه بار برای اون آیه با توجه به کد بالا رنگ آمیزی کنید

programer1389
دوشنبه 24 شهریور 1393, 21:07 عصر
یعنی لازمه که من مختصات اخر ایه قبل ومختصات ایه بعد را داشته باشم؟

rahnema1
دوشنبه 24 شهریور 1393, 21:25 عصر
یعنی لازمه که من مختصات اخر ایه قبل ومختصات ایه بعد را داشته باشم؟

این روشی که گفتم اجراش ساده هست و فقط احتیاج داره مختصات مستطیل دربرگیرنده خطوطی که گفتم ذخیره بشه
الان با این روشی که گفتم موافقید یا روش دیگه ای پیشنهاد می کنید؟

programer1389
سه شنبه 25 شهریور 1393, 01:15 صبح
نه خوبه ممنون
من یک بانک اکسس از همین تصاویر پیدا کردم که در اون شماره خط شروع و پایان و شماره ستون شروع و پایان نشان داده شده

programer1389
سه شنبه 25 شهریور 1393, 01:52 صبح
این هم یک جدول اون البته بانک اصلی بزرگ بود

programer1389
چهارشنبه 26 شهریور 1393, 13:25 عصر
من هنوز منتظرم

rahnema1
چهارشنبه 26 شهریور 1393, 13:34 عصر
این جور هم میشه، حتی میشه فقط مختصات گوشه بالا و سمت چپ هر آیه را ذخیره کرد و با توجه به اینکه ارتفاع هر خط قران هم تقریبا ثابته میشه مستطیلهای وسطی را هم به راحتی حساب کرد

programer1389
پنج شنبه 27 شهریور 1393, 12:05 عصر
ميشه بيشتر توضيح بدين؟

rahnema1
پنج شنبه 27 شهریور 1393, 13:51 عصر
هر صفحه به 15 تا خط با ارتفاع 46 پیکسل تقسیم میشه
یعنی startline و endline به این خطوط اشاره می کنه
startcol و endcol هم نشون میده که مستطیل از لبه سمت چپ تصویر چند پیکسل فاصله داره

programer1389
جمعه 28 شهریور 1393, 01:12 صبح
پس برای مستطیل داریم؟
x1=startcol
x2=endcol
y1=( (line_number-1)*46) - 46/2
y2=( (line_number-1)*46) +46/2

rahnema1
جمعه 28 شهریور 1393, 06:08 صبح
ای کاش فقط یک مستطیل بود
گفتم که مثلا اگه ابتدای آیه وسط سطر باشه و آیه هم چند تا سطر جا گرفته باشه و انتهای آیه هم در وسط سطر تموم بشه نیاز داریم که از سه تا مستطیل استفاده کنیم

programer1389
جمعه 28 شهریور 1393, 13:11 عصر
خدا رو شکر فکر کنم تونستم