সি # /। নেট এ দুটি চিত্র মার্জ করা হচ্ছে


87

সাধারণ ধারণা: আমার দুটি চিত্র রয়েছে যা আমি মার্জ করতে চাই, একটি হ'ল 500x500 যা মাঝখানে স্বচ্ছ অন্যটি 150x150।

বেসিক ধারণাটি হ'ল 500x500 খালি একটি ক্যানভাস তৈরি করুন, খালি ক্যানভাসের মাঝখানে 150x150 চিত্রটি অবস্থান করুন এবং তারপরে 500x500 চিত্রটি অনুলিপি করুন যাতে এর স্বচ্ছ মধ্যম 150x150টি জ্বলতে দেয়।

আমি জাভা, পিএইচপি এবং পাইথনে এটি কীভাবে করব তা আমি জানি ... সি # তে কী কী অবজেক্ট / ক্লাস ব্যবহার করা উচিত তা সম্পর্কে আমার কোনও ধারণা নেই, চিত্রের অন্যটিতে অনুলিপি করার একটি দ্রুত উদাহরণ যথেষ্ট।


এটা কি সাহায্য করে? daniweb.com/forums/thread87993.html
Dror

উত্তর:


99

মূলত আমি আমাদের অ্যাপ্লিকেশনগুলির মধ্যে একটিতে এটি ব্যবহার করি: আমরা একটি ভিডিওর ফ্রেমের উপরে প্লেইকনটি ওভারলে করতে চাই:

Image playbutton;
try
{
    playbutton = Image.FromFile(/*somekindofpath*/);
}
catch (Exception ex)
{
    return;
}

Image frame;
try
{
    frame = Image.FromFile(/*somekindofpath*/);
}
catch (Exception ex)
{
    return;
}

using (frame)
{
    using (var bitmap = new Bitmap(width, height))
    {
        using (var canvas = Graphics.FromImage(bitmap))
        {
            canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
            canvas.DrawImage(frame,
                             new Rectangle(0,
                                           0,
                                           width,
                                           height),
                             new Rectangle(0,
                                           0,
                                           frame.Width,
                                           frame.Height),
                             GraphicsUnit.Pixel);
            canvas.DrawImage(playbutton,
                             (bitmap.Width / 2) - (playbutton.Width / 2),
                             (bitmap.Height / 2) - (playbutton.Height / 2));
            canvas.Save();
        }
        try
        {
            bitmap.Save(/*somekindofpath*/,
                        System.Drawing.Imaging.ImageFormat.Jpeg);
        }
        catch (Exception ex) { }
    }
}

10
ধন্যবাদ! আজ সম্পূর্ণভাবে আমার বেকন সংরক্ষণ করেছেন
জেসন মোর

@ ডাউনভোটার বিস্তৃতভাবে যত্নশীল, যাতে আমি আমার উত্তর বাড়িয়ে তুলতে পারি?
Andreas Niedermair

4
@ আন্দ্রেসনিডেরমায়ার নিচের ভোটার সম্ভবত আপনার কোডটি পেস্ট করেছেন এবং কাজ করেননি
জিন-পল

এটি যেমন সোনার উত্তর তেমন!
দিমিত্রিভাইকো

60

এটি অন্যটিতে একটি চিত্র যুক্ত করবে।

using (Graphics grfx = Graphics.FromImage(image))
{
    grfx.DrawImage(newImage, x, y)
}

গ্রাফিক্স নেমস্পেসে রয়েছে System.Drawing


35

এত কিছুর পরেও, আমি একটি নতুন সহজ পদ্ধতিটি চেষ্টা করে দেখতে পেলাম ..

এটি একসাথে একাধিক ছবিতে যোগদান করতে পারে:

public static System.Drawing.Bitmap CombineBitmap(string[] files)
{
    //read all images into memory
    List<System.Drawing.Bitmap> images = new List<System.Drawing.Bitmap>();
    System.Drawing.Bitmap finalImage = null;

    try
    {
        int width = 0;
        int height = 0;

        foreach (string image in files)
        {
            //create a Bitmap from the file and add it to the list
            System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(image);

            //update the size of the final bitmap
            width += bitmap.Width;
            height = bitmap.Height > height ? bitmap.Height : height;

            images.Add(bitmap);
        }

        //create a bitmap to hold the combined image
        finalImage = new System.Drawing.Bitmap(width, height);

        //get a graphics object from the image so we can draw on it
        using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(finalImage))
        {
            //set background color
            g.Clear(System.Drawing.Color.Black);

            //go through each image and draw it on the final image
            int offset = 0;
            foreach (System.Drawing.Bitmap image in images)
            {
                g.DrawImage(image,
                  new System.Drawing.Rectangle(offset, 0, image.Width, image.Height));
                offset += image.Width;
            }
        }

        return finalImage;
    }
    catch (Exception ex)
    {
        if (finalImage != null)
            finalImage.Dispose();

        throw ex;
    }
    finally
    {
        //clean up memory
        foreach (System.Drawing.Bitmap image in images)
        {
            image.Dispose();
        }
    }
}

4
দুর্দান্ত কাজ করেছে জি.ক্লেয়ার (কালার ট্রান্সপারেন্ট) আপনি যদি অ্যানিমেশন স্প্রাইটের জন্য পিএনজি চিত্রগুলি মার্জ করতে চান
সাইকেলে

4
ফাইনাল আইমেজ = নতুন সিস্টেম.ড্রেইং.বিটম্যাপ (প্রস্থ, উচ্চতা); প্রস্থ / উচ্চতার উচ্চ মানের জন্য ত্রুটি নিক্ষেপ করে
জিতিট করুন

@ অ্যান্ট দাবি ঠিক আছে আমি একটি পুরানো প্রশ্ন ফিরিয়ে আনার জন্য দুঃখিত, তবে আমি এটিকে ভিবি.এনইটিতে রূপান্তরিত করেছি .. পরের চিত্রটিতে অব্যবহৃত পিক্সেল / ফাঁকা পিক্সেলগুলি স্বচ্ছ হলে আমি কি অন্য ছবিগুলি একে অপরের উপর রাখি? যদি না হয়, এটি করার কোন উপায় আছে?
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.