Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Рисую трафарет разным цветом


Автор: Rapalex 16.4.2007, 09:48
Суть в следующем, есть у меня чёрно белый битмап (на нём изображена какаята стрелочка),

Иужно мне её на окне отрисовать оперделённым цветом, да так чтоб она прозрачной была
(в смысле стрелочка в квадрате, и вто чтоб квадрат не закрашивал рисунки под собой, а была видна только стрелочка определённого цвета).

В GDI это при помоши ROP2 всё делалось, я там долго сидел биты считал чтоб такое сделать, а что в GDI+ делать?

Автор: enginer 16.4.2007, 12:39
Может, подойдут методы MakeTransparent(...) и SetPixel(...) класса Bitmap? Ну а чтоб не гемороиться с обходом всех пикселей можно попробовать использовать http://forum.vingrad.ru/topic-145847/kw-заливка.html
Или я что-то не так понял?

Автор: mr.DUDA 16.4.2007, 12:56
Нужно рисовать картинку с объектом ImageAttributes, в котором выставить ColorMatrix. Пример из мсдн:

Код
private void SetColorMatrixExample(PaintEventArgs e)
{
             
    // Create a rectangle image with all colors set to 128 (medium
             
    // gray).
    Bitmap myBitmap = new Bitmap(50, 50, PixelFormat.Format32bppArgb);
    Graphics g = Graphics.FromImage(myBitmap);
    g.FillRectangle(new SolidBrush(Color.FromArgb(255, 128, 128, 128)),
        new Rectangle(0, 0, 50, 50));
    myBitmap.Save("Rectangle1.jpg");
             
    // Open an Image file and draw it to the screen.
    Image myImage = Image.FromFile("Rectangle1.jpg");
    e.Graphics.DrawImage(myImage, 20, 20);
             
    // Initialize the color matrix.
    ColorMatrix myColorMatrix = new ColorMatrix();
    
    // Red
    myColorMatrix.Matrix00 = 1.75f; 
    
    // Green
    myColorMatrix.Matrix11 = 1.00f; 
    
    // Blue
    myColorMatrix.Matrix22 = 1.00f; 
    
    // alpha
    myColorMatrix.Matrix33 = 1.00f; 
   
    // w
    myColorMatrix.Matrix44 = 1.00f; 
    
             
    // Create an ImageAttributes object and set the color matrix.
    ImageAttributes imageAttr = new ImageAttributes();
    imageAttr.SetColorMatrix(myColorMatrix);
             
    // Draw the image using the color matrix.
    Rectangle rect = new Rectangle(100, 20, 200, 200);
    e.Graphics.DrawImage(myImage, rect, 0, 0, 200, 200, 
        GraphicsUnit.Pixel, imageAttr);      
    
}


Конкретную матрицу составлять придётся методом тыка, т.к. сильно зависит от того что нужно получить.

Автор: Rapalex 16.4.2007, 13:08
У меня сть трафарет, нужно создать рисунок который весь прозрачный кроме трафарета нарисованым определённым цветом. Как такое сделать?

Автор: enginer 16.4.2007, 13:44
Как я выше писал, пробовал?

Код

            Bitmap myBitmap = new Bitmap("c:\\arrow.bmp"); // грузим картинку
            myBitmap.MakeTransparent(Color.Black);               // говорим что черный - прозрачный
            MapFill mf = new MapFill();                                      // заливаем остальное нужным цветом
            mf.Fill((Image)myBitmap,new Point(16,52),Color.Aquamarine);
            e.Graphics.DrawImage(myBitmap,new Point(100,100)); // ну и рисуем где надо


MapFill - из моего предыдущего поста. И на сколько я понимаю, делает именно то что тебе нужно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)