Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение нескольких картинок в одну 
V
    Опции темы
VitalicH
Дата 28.7.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 20.7.2007
Где: Щекино

Репутация: нет
Всего: нет



Подскажите пожалуйста как сделать сохранение нескольких картинок в одну с учетом расположения на исходном изображении каждой картинки?
PM   Вверх
stab
Дата 28.7.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



т.е. требуется получить GIF из нескольких кадров? или что? smile


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
VitalicH
Дата 28.7.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 20.7.2007
Где: Щекино

Репутация: нет
Всего: нет



Мне необходимо загрузить несколько BMP картинок и построить их в ряд в одной картинке
PM   Вверх
stab
Дата 28.7.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



создавай одну большую и рисуй их туда в ряд. в чём собственно сложность?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
VitalicH
Дата 28.7.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 20.7.2007
Где: Щекино

Репутация: нет
Всего: нет



Сложность в незнании команд которые нужно применить 
PM   Вверх
stab
Дата 28.7.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



всё что тебе нужно это два класса: Bitmap и Graphics:

загрузка изображения: Bitmap bitmap = new Bitmap("image.jpg");
сохранение: bitmap.Save("image.jpg", ImageFormat.Jpeg);
создание нового битмапа произвольных размеров: Bitmap bitmap = new Bitmap(100, 100);
получение Graphics для битмапа: Graphics graphics = Graphics.FromImage(bitmap);
рисование одного битмапа на другом: graphics.DrawImage(bitmap2, 0, 0);

не забывай вызывать Dispose() по завершении работы с Bitmap и Graphics.






--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
VitalicH
Дата 28.7.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 20.7.2007
Где: Щекино

Репутация: нет
Всего: нет



Большое спасибо
PM   Вверх
mr.DUDA
Дата 28.7.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Код
using System;
using System.Drawing;
using System.Drawing.Imaging;

class Program
{
    // объединяет несколько картинок в одну, выстраивая их по горизонтали
    static Bitmap CombineImages(Image[] images)
    {
        // определяем размер выходной картинки
        // высота будет = максимальной картинке, ширина = сумме
        int width = 0, height = 0;
        foreach (Image image in images)
        {
            width += image.Width;
            height = Math.Max(height, image.Height);
        }

        // склеиваем картинку
        Bitmap result = new Bitmap(width, height);
        using (Graphics gr = Graphics.FromImage(result))
        {
            // фон будет белым
            gr.FillRectangle(Brushes.White, new Rectangle(0, 0, width, height));

            int x = 0;
            foreach (Image image in images)
            {
                // центрируем по вертикали
                int y = (height - image.Height) / 2;
                
                // рисуем картинку
                gr.DrawImage(image, new Point(x, y));
                
                // сдвигаемся вправо
                x += image.Width;
            }
        }

        return result;
    }

    static void Main()
    {
        // к примеру, грузим 3 картинки из файлов
        Image[] images = new Image[]
        {
            Image.FromFile(@"c:\1.jpg"),
            Image.FromFile(@"c:\2.gif"),
            Image.FromFile(@"c:\3.jpg")
        };

        // склеиваем в одну и сохраняем на диск
        Bitmap result = CombineImages(images);
        result.Save(@"c:\result.bmp", ImageFormat.Bmp);
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
VitalicH
Дата 28.7.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 20.7.2007
Где: Щекино

Репутация: нет
Всего: нет



Все получилось вот только картинки в конечном файле шире чем в исходных и получается что одна на другой нарисовано 
исходные по 90 ,а в конечном файле получаются по 120

как бы это исправить?

PM   Вверх
mr.DUDA
Дата 28.7.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Странно, у меня всё нормально работает.


--------------------
user posted image
PM MAIL WWW   Вверх
stab
Дата 28.7.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



VitalicH, похоже dpi влияет. попробуй рисовать так:

Код

gr.DrawImage(image, x, y, image.Width, image.Height);



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
VitalicH
Дата 28.7.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 20.7.2007
Где: Щекино

Репутация: нет
Всего: нет



Все получилось большое спасибо вам.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.