Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Работа с изображением


Автор: Whitebrain 4.4.2011, 21:40
В PictureBox грузится около 6 картинок ,и с некой периодичностью загружаются новые картинки,потом исчезают.
Вопрос в следующем 
1)как лучше сделать ,чего читать, куда смотреть 
2)прозрачность задника картинок  
Заранее спасибо. smile 

Автор: -Mikle- 6.4.2011, 07:49
Я не понял задачу. Поясни, что значит 6 картинок в один пикчебокс? Может просто 6 картинок должны нарисоваться? В общем, поясни.

Автор: Whitebrain 6.4.2011, 11:35
Например у меня в центре  picturebox квадрат ,а вокруг должно быть 3 кружка,и квадрат и кружок хранятся в виде картинок в двух   файлах .bmp.
Тоесть в picturebox должно находится  4 изображения .


Автор: Whitebrain 6.4.2011, 12:30
Вот сделал с 3 изображениями,есть ли какой более оптимизированный метод?
Код

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public static Bitmap CombineImages(Image image1, Image image2,Image image3, int width, int height)
        {
            Bitmap result = new Bitmap(width, height);
            using (Graphics graphics = Graphics.FromImage(result))
            {
                //set the resize quality modes to high quality
                graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //draw the images into the target bitmap
                graphics.DrawImage(image1,80,50, result.Width-140, result.Height-140);
                graphics.DrawImage(image3, 110, 30, result.Width - 160, result.Height - 160);
                graphics.DrawImage(image2, 0, 0, result.Width-140, result.Height-140);
            }
            return result;
        }
        private void Form1_Load(object sender, EventArgs e)
        {
         
            Bitmap bmp = new Bitmap(@"D:\betaimjpg\black.jpg");
          bmp.MakeTransparent(Color.White);
            Bitmap btm = new Bitmap(@"D:\betaimjpg\virus.jpg");
            Bitmap thinking = new Bitmap(@"D:\betaimjpg\thinking.png");
            btm.MakeTransparent(); thinking.MakeTransparent();
            pictureBox1.Image = CombineImages(bmp, btm, thinking, 200, 200);
        }
    }
}


Автор: -Mikle- 6.4.2011, 13:04
Русуй точно таким же способом, только сразу на графиксе любого окна, а не в картинку... Забудь про пикчебокс, рисовать можно в любом контроле (например Panel).

Автор: Whitebrain 6.4.2011, 13:46
panel.Image и понеслось?
еще вопрос ,у png задний слой прозрачный,верно?
и еще как дела с гифками обстоят,их точно также можно?

Автор: -Mikle- 6.4.2011, 13:59
Цитата(Whitebrain @  6.4.2011,  16:46 Найти цитируемый пост)
panel.Image и понеслось?

Нет, событие panel.Paint и вперед...

Цитата(Whitebrain @  6.4.2011,  16:46 Найти цитируемый пост)
у png задний слой прозрачный,верно

У него нет заднего слоя. Просто каждый пиксель, помимо цвета, несет информацию об уровне прозрачности от 0 до 255.

Цитата(Whitebrain @  6.4.2011,  16:46 Найти цитируемый пост)
и еще как дела с гифками обстоят,их точно также можно

С гифками придется немного постараться. Есть класс аниматора, но я с ним дела не имел. А вообще, к сведению, формат GIF давно стал платным и его использование должно быть лицензированным кажется.

Автор: Whitebrain 6.4.2011, 16:31
хорошо,тогда еще пару вопросов ,ресайз изображения делать как?евент по изменению размера getwidth ,ну а размер менять ?
и еще как очищать изображение?

Автор: -Mikle- 6.4.2011, 17:20
Цитата(Whitebrain @  6.4.2011,  19:31 Найти цитируемый пост)
ресайз изображения делать как?

Можно перед рисованием масштаб у графикса задавать, а можно вручную расчитывать.

Но если будешь увеличивать, то я сомневаюсь, что будет нормально, потому что битмап он и в африке битмап, при увеличении качество будет только ухудшаться.

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