windows bitmap image что это

Манипулируем System.Drawing.Bitmap

// загружаем картинку
sourceBitmap = (Bitmap) Image.FromFile( «Zap.png» );

// делаем пустую картинку того же размера
targetBitmap = new Bitmap(sourceBitmap.Width, sourceBitmap.Height, sourceBitmap.PixelFormat);

for ( int y = 0; y for ( int x = 0; x byte rgb = ( byte )(0.3 * c.R + 0.59 * c.G + 0.11 * c.B);

targetBitmap.SetPixel(x, y, Color.FromArgb(c.A, rgb, rgb, rgb));

Это решение понятное и простое, но к сожалению жуть как неэффективное. Чтобы получить более «резвый» код, можно попробовать написать все это дело на С++. Для начала создадим структурку для хранения цветовых значений пикселя

// структура отражает один пиксель в 32bpp RGBA
struct Pixel <

Теперь можно написать функцию которая будет делать пиксель черно-белым:

const BYTE scale = static_cast BYTE >(0.3 * pixel.Red + 0.59 * pixel.Green + 0.11 * pixel.Blue);

p.Red = p.Green = p.Blue = scale;

Теперь собственно пишем саму функцию обхода:

CPPSIMDLIBRARY_API void AlterBitmap( BYTE * src, BYTE * dst, int width, int height, int stride)

for ( int y = 0; y for ( int x = 0; x int offset = x * sizeof (Pixel) + y * stride;

Pixel& s = * reinterpret_cast

Pixel& d = * reinterpret_cast

// изменяем d
d = MakeGrayscale(s);

А дальше остается только использовать ее из C#.

// «зажимаем» байты обеих картинок
Rectangle rect = new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height);

BitmapData srcData = sourceBitmap.LockBits(rect, ImageLockMode.ReadWrite, sourceBitmap.PixelFormat);

BitmapData dstData = targetBitmap.LockBits(rect, ImageLockMode.ReadWrite, sourceBitmap.PixelFormat);

// отсылаем в unmanaged код для изменений
AlterBitmap(srcData.Scan0, dstData.Scan0, srcData.Width, srcData.Height, srcData.Stride);

// отпускаем картинки
sourceBitmap.UnlockBits(srcData);

Это улучшило быстродействие, но мне захотелось еще большего. Я добавил директиву OpenMP перед циклом по y и получил предсказуемое ускорение в 2 раза. Дальше захотелось поэкспериментировать и попробовать применить еще и SIMD. Для этого я написал вот этот, не очень читабельный, код:

CPPSIMDLIBRARY_API void AlterBitmap( BYTE * src, BYTE * dst, int width, int height, int stride)

// факторы для конверсии в ч/б
static __m128 factor = _mm_set_ps(1.0f, 0.3f, 0.59f, 0.11f);

#pragma omp parallel for

for ( int y = 0; y const int offset = y * stride;

__m128i * s = ( __m128i *)(src + offset);

__m128i * d = ( __m128i *)(dst + offset);

for ( int x = 0; x > 2); ++x) <

// у нас 4 пикселя за раз
for ( int p = 0; p // конвертируем пиксель
__m128 pixel;

// считаем сумму
const BYTE sum = ( BYTE )(pixel.m128_f32[0] + pixel.m128_f32[1] + pixel.m128_f32[2]);

// пишем назад в битмап
d->m128i_u8[p m128i_u8[(p m128i_u8[(p m128i_u8[(p BYTE )pixel.m128_f32[3];

Несмотря на то, что этот код делает 4 операции умножения за раз (инструкция _mm_mul_ps ), все эти конверсии не дали никакого выигрыша по сравнению с обычными операциями – скорее наоборот, алгоритм начал работать медленнее. Вот результаты выполнения функций на картинке 360×480. Использовался 2х-ядерный MacBook с 4Гб RAM, результаты усредненные.

А вот и конечный результат:

Источник

Windows Bitmap

BMP (от англ. растровых изображений. Изначально формат мог хранить только аппаратно-зависимые растры (англ. Device Dependent Bitmap, DDB ), но с развитием технологий отображения графических данных формат BMP стал преимущественно хранить аппаратно-независимые растры (англ. Device Independent Bitmap, DIB ).

С форматом BMP работает огромное количество программ, так как его поддержка интегрирована в операционные системы Windows и OS/2. Файлы формата BMP могут иметь расширения .bmp, .dib и .rle. Кроме того, данные этого формата включаются в двоичные файлы ресурсов RES и в PE-файлы.

Глубина цвета в данном формате может быть от 1 до 48 бит на пиксель, максимальные размеры изображения 65535×65535 пикселей.

В формате BMP есть поддержка сжатия по алгоритму RLE, однако теперь существуют форматы с более сильным сжатием, и из-за большого объёма BMP редко используется в Интернете, где для сжатия без потерь используются PNG и более старый portable anymap. Для сохранения промежуточных версий растровых изображений редакторы иногда используют собственный формат — например, XCF у Adobe Photoshop.

Содержание

Обзор структуры файла

BMP-файл состоит из четырёх частей:

Смещение Длина поля Описание поля (что тут находится)

Заголовок файла Смещение Длина поля Описание поля (что тут находится

14 4 Размер заголовка BITMAP (в байтах) равно 40 18 4 Ширина изображения в пикселях 22 4 Высота изображения в пикселях 26 2 Число плоскостей, должно быть 1 28 2 Бит/пиксел: 1, 4, 8 или 24 30 4 Тип сжатия 34 4 0 или размер сжатого изображения в байтах. 38 4 Горизонтальное разрешение, пиксел/м 42 4 Вертикальное разрешение, пиксел/м 46 4 Количество используемых цветов 50 4 Количество «важных» цветов. Палитра (Карта цветов для N цветов), если используется 54 4*N Палитра

BITMAPFILEHEADER

Эта структура содержит информацию о типе, размере и представлении данных в файле.

Тип «WORD» должен иметь размер 16 бит, типы «DWORD» и «LONG» — 32 бита, порядок байтов подразумевается little endian.

После заголовка файла

BITMAPINFOHEADER [2]

Если содержит ненулевое значение и biBitCount меньше 16, biClrUsed указывает количество цветов, к которым будет обращаться драйвер устройства или приложение. Если biBitCount больше или равен 16, biClrUsed указывает размер палитры, используемой для оптимизации работы системных палитр. Если biBitCount равен 16 или 32, оптимальная палитра следует сразу после трёх четырёхбайтных маск. В упакованном изображении массив пикселей следует сразу после структуры BITMAPINFO, biClrUsed должен содержать ноль, либо реальный размер палитры.

Примечания: Структура BITMAPINFO объединяет BITMAPINFOHEADER и палитру, предоставляя полное описание размеров и цветов изображения.

Чтобы найти палитру в структуре BITMAPINFO, приложение должно использовать информацию, хранимую в biSize, следующим образом:

BITMAPV4HEADER [3]

Поля от начала структуры и до bV4ClrImportant включительно имеют то же назначение, что и соответствующие поля структуры BITMAPINFOHEADER.

BITMAPV5HEADER [4]

Для полей от начала структуры и до bV5GammaBlue включительно будут описаны только отличия от предыдущих версий — BITMAPINFOHEADER и BITMAPV4HEADER.

Палитра

Палитра может содержать последовательность четырёхбайтовых полей по числу доступных цветов (256 для 8-битного изображения). Три младшие байта каждого поля определяют интенсивность красной, зелёной и синей компоненты цвета, старший байт не используется. Каждый пиксель изображения описан в таком случае одним байтом, содержащим номер поля палитры, в котором сохранен цвет этого пикселя.

Если пиксель изображения описывается 16-битным числом, палитра может хранить три двухбайтных значения, каждое из которых пределяет маску для извлечения из 16-битного пикселя красной, зелёной и синей компонент цвета.

Файл BMP может не содержать палитры, если в нём хранится несжатое полноцветное изображение.

Данные изображения

Последовательность пикселей, записанных в том или ином виде. Пиксели хранятся построчно, снизу вверх. Каждая строка изображения дополняется нулями до длины, кратной четырём байтам.

В bmp файлах с глубиной цвета 24 бита, байты цвета каждого пиксела хранятся в порядке BGR (Blue,Green,Red)

B bmp файлах с глубиной цвета 32 бита, байты цвета каждого пиксела хранятся в порядке BGRA (Blue,Green,Red,Alpha)

Битность изображения

В зависимости от количества представляемых цветов, на каждую точку отводится от 1 до 48 битов:

Индексированные цвета

При количестве бит от 1 до 8 на каждый пиксел может использоваться специальный режим индексированных цветов. В этом случае число, соответствующее каждому пикселу указывает не на цвет, а на номер цвета в палитре. Благодаря использованию палитры имеется возможность адаптировать изображение к цветам, присутствующим на изображении. В таком случае изображение ограниченно не заданными цветами, а максимальным количеством одновременно используемых цветов…

Источник

Bitmap Image Класс

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Предоставляет специальный объект BitmapSource, оптимизированный для загрузки изображений с помощью языка XAML.

Примеры

В следующих примерах кода показано, как использовать BitmapImage в XAML (XAML) и коде.

Комментарии

BitmapImage объекты, созданные с помощью BitmapImage конструктора, автоматически инициализируются, а изменения свойств игнорируются.

Конструкторы

Инициализирует новый экземпляр класса BitmapImage.

Инициализирует новый экземпляр BitmapImage, используя предоставленный Uri.

Инициализирует новый экземпляр BitmapImage с изображением, источником коего является Uri, и кэшируемого в соответствии с предоставленным RequestCachePolicy.

Идентифицирует свойство зависимостей CacheOption.

Идентифицирует свойство зависимостей CreateOptions.

Идентифицирует свойство зависимостей DecodePixelHeight.

Идентифицирует свойство зависимостей DecodePixelWidth.

Идентифицирует свойство зависимостей Rotation.

Идентифицирует свойство зависимостей SourceRect.

Идентифицирует свойство зависимостей StreamSource.

Идентифицирует свойство зависимостей UriCachePolicy.

Идентифицирует свойство зависимостей UriSource.

Свойства

Получает или задает значение, представляющее базовый Uri текущего контекста BitmapImage.

Получает или задает BitmapCacheOption для использования данным экземпляром BitmapImage.

Возвращает значение, которое указывает, можно ли сделать объект неизменяемым.

Возвращает или задает высоту декодированного изображения в пикселях.

Возвращает или задает ширину декодированного изображения в пикселях.

Возвращает объект Dispatcher, с которым связан этот объект DispatcherObject.

Возвращает горизонтальные точки на дюйм изображения (DPI).

Получает вертикальные точки на дюйм изображения (DPI).

Возвращает исходный формат PixelFormat данных растрового изображения.

Возвращает значение, которое указывает, сопоставлены ли один или несколько объектов AnimationClock любому из свойств зависимостей этого объекта.

Возвращает высоту исходного растрового изображения в единицах, не зависящих от устройства (1/1/96 дюйма на единицу).

Получает значение, указывающее, производит ли BitmapImage в данный момент загрузку содержимого.

Получает значение, указывающее, доступен ли объект для изменения в настоящее время.

Получает значение, указывающее, является ли этот экземпляр в данный момент запечатанным (доступным только для чтения).

Не поддерживается. BitmapImage не поддерживает свойство Metadata и создает исключение NotSupportedException.

Получает цветовую палитру растрового изображения, если она задана.

Получает высоту растрового изображения в пикселях.

Получает ширину растрового изображения в пикселях.

Получает или задает угол для поворота BitmapImage.

Получает или задает прямоугольник, который используется в качестве источника для BitmapImage.

Получает или задает исходный поток BitmapImage.

Получает или задает значение, представляющее текущую политику кэширования изображений из источника HTTP.

Получает или задает источник Uri для BitmapImage.

Возвращает ширину точечного рисунка в единицах, независимых от устройства (1/1/96 дюйма на единицу).

Методы

Применяет AnimationClock к заданному DependencyProperty. Если свойство уже анимировано, используется эстафетное поведение SnapshotAndReplace.

Применяет AnimationClock к заданному DependencyProperty. Если свойство уже является анимированным, используется указанное поведение HandoffBehavior.

Применяет анимацию к указанному DependencyProperty. Анимация начинается при отрисовке следующего кадра. Если указанное свойство уже анимировано, используется поведение перемещения SnapshotAndReplace.

Применяет анимацию к указанному DependencyProperty. Анимация начинается при отрисовке следующего кадра. Если указанное свойство уже является анимированным, используется указанное поведение HandoffBehavior.

Сигнализирует о начале инициализации объекта BitmapImage.

Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject.

Проверяет, получено ли исходное содержимое точечного рисунка из известного узла источника. Этот метод позволяет проверить безопасность операций копирования пикселей.

Очищает локальное значение свойства. Очищаемое свойство задается идентификатором DependencyProperty.

Очищает локальное значение доступного только для чтения свойства. Очищаемое свойство задается ключом DependencyPropertyKey.

Создает изменяемый клон данного объекта BitmapImage, делая глубокие копии значений этого объекта.

Делает этот экземпляр глубокой копией указанного объекта BitmapSource. При копировании свойств зависимостей этот метод копирует ссылки на ресурсы и привязки данных (которые могут уже не быть разрешимыми), но не копирует анимации и их текущие значения.

Создает модифицируемый клон данного объекта BitmapImage, делая глубокие копии текущих значений этого объекта. Ссылки на ресурсы, привязки данных и анимации не копируются, но копируются их текущие значения.

Делает этот экземпляр изменяемой глубокой копией указанной коллекции BitmapSource с использованием текущих значений свойств. Ссылки на ресурсы, привязки данных и анимации не копируются, но копируются их текущие значения.

Приводит значение указанного свойства зависимостей. Это осуществляется путем вызова какой-либо функции CoerceValueCallback, указанной в метаданных свойства зависимостей, которое существует в вызывающем объекте DependencyObject.

Копирует данные пикселей растрового изображения в массив пикселей с заданным шагом начиная с заданного смещения.

Копирует данные пикселей растрового изображения из заданного прямоугольника в массив пикселей с заданным шагом начиная с заданного смещения.

Копирует данные пикселей растрового изображения в пределах заданного прямоугольника.

Инициализирует новый экземпляр класса Freezable.

Если реализуется в производном классе, создает новый экземпляр производного класса Freezable.

Сигнализирует о завершении инициализации объекта BitmapImage.

Определяет, является ли указанный DependencyObject эквивалентом текущего DependencyObject.

Делает экземпляр BitmapSource или производный класс постоянным.

Возвращает не анимированное значение указанного объекта DependencyProperty.

Создает фиксированную копию объекта Freezable, используя базовые (не анимационные) значения свойств. Так как копия является фиксированной, копируются только ссылки на фиксированные вложенные объекты.

Делает этот экземпляр клоном указанного объекта BitmapSource.

Создает фиксированную копию объекта Freezable с использованием текущих значений свойств. Так как копия является фиксированной, копируются только ссылки на фиксированные вложенные объекты.

Делает этот экземпляр зафиксированным клоном указанного объекта BitmapSource. Ссылки на ресурсы, привязки данных и анимации не копируются, но копируются их текущие значения.

Возвращает хэш-код для данного объекта DependencyObject.

Создает специализированный перечислитель для определения свойств зависимостей, которые локально установили значения для данного DependencyObject.

Возвращает объект Type для текущего экземпляра.

Возвращает текущее действующее значение свойства зависимостей в этом экземпляре DependencyObject.

Повторно вычисляет действующее значение для указанного свойства зависимостей.

Создает неполную копию текущего объекта Object.

Вызывается при изменении текущего объекта Freezable.

Обеспечивает создание соответствующих указателей контекста для элемента данных типа DependencyObjectType, который был только что задан.

этот элемент поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для непосредственного использования из кода.

Переопределяет реализацию DependencyObject для OnPropertyChanged(DependencyPropertyChangedEventArgs), чтобы также вызвать любой обработчик Changed в ответ на изменение свойства зависимостей типа Freezable.

Возвращает локальное значение свойства зависимостей, если таковое существует.

Обеспечивает доступ к Freezable из допустимого потока. Наследники объекта Freezable должны вызывать данный метод в начале любого API, который считывает элементы данных, не являющиеся свойствами зависимостей.

Задает значение свойства зависимостей, не меняя источник значения.

Задает локальное значение свойства зависимостей, указанного идентификатором этого свойства.

Задает локальное значение свойства зависимости только для чтения, определяемое идентификатором DependencyPropertyKey свойства зависимостей.

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

Создает строковое представление данного объекта на базе языка и региональных параметров.

Обеспечивает наличие у вызывающего потока доступ к этому DispatcherObject.

Вызывает событие Changed для объекта Freezable и вызывает его метод OnChanged(). Классы, производные от Freezable, должны вызывать этот метод в конце любого API, который изменяет члены класса, не сохраненные в виде свойств зависимостей.

Проверяет, что объект Freezable не заморожен и доступ к нему осуществляется из допустимого контекста потока. Наследники объекта Freezable должны вызывать данный метод в начале любого API, который выполняет запись в элементах данных, не являющихся свойствами зависимостей.

События

Происходит, когда изменяется класс Freezable или объект, который входит в его состав.

Происходит при неудаче загрузки изображения вследствие повреждения его заголовка.

Происходит при полном завершении загрузки содержимого точечного рисунка.

Происходит при невозможности загрузки содержимого точечного рисунка.

Происходит при изменении состояния хода загрузки содержимого точечного рисунка.

Явные реализации интерфейса

Форматирует значение текущего экземпляра, используя указанный формат.

Источник

Bitmap Класс

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Инкапсулирует точечный рисунок GDI+, состоящий из данных пикселей графического изображения и атрибутов рисунка. Объект Bitmap используется для работы с изображениями, определяемыми данными пикселей.

Примеры

Этот пример предназначен для использования с Windows Forms, который содержит, и, Label PictureBox Button Label1 PictureBox1 и Button1 соответственно. Вставьте код в форму и свяжите Button1_Click метод с Click событием кнопки.

Комментарии

Точечный рисунок состоит из точечных данных для графического изображения и его атрибутов. Существует множество стандартных форматов для сохранения растрового изображения в файл. GDI+ поддерживает следующие форматы файлов: BMP, GIF, EXIF, JPG, PNG и TIFF. Дополнительные сведения о поддерживаемых форматах см. в разделе Типы точечных рисунков.

Вы можете создавать изображения из файлов, потоков и других источников с помощью одного из Bitmap конструкторов и сохранять их в поток или в файловой системе с помощью Save метода. Изображения рисуются на экране или в память с помощью DrawImage метода Graphics объекта. Список разделов, посвященных работе с файлами изображений, см. в разделе Работа с изображениями, точечными рисунками, значками и метафайлами.

BitmapКласс недоступен для разных доменов приложений. Например, если создать динамическую AppDomain и создать несколько кистей, перьев и точечных рисунков в этом домене, а затем передать эти объекты обратно в основной домен приложения, вы можете успешно использовать перья и кисти. Однако при вызове DrawImage метода для рисования упакованного Bitmap можно получить следующее исключение.

Удаленное взаимодействие не может найти поле «Native Image» в типе «System. Drawing. Image».

Конструкторы

Инициализирует новый экземпляр класса Bitmap из указанного существующего изображения.

Инициализирует новый экземпляр класса Bitmap из указанного существующего изображения, масштабированного до заданного размера.

Инициализирует новый экземпляр класса Bitmap из указанного существующего изображения, масштабированного до заданного размера.

Инициализирует новый экземпляр класса Bitmap с заданным размером.

Инициализирует новый экземпляр класса Bitmap с заданным размером и с разрешением указанного объекта Graphics.

Инициализирует новый экземпляр класса Bitmap с заданным размером, форматом и данными пикселей.

Инициализирует новый экземпляр класса Bitmap с заданными значениями размера и формата.

Инициализирует новый экземпляр класса Bitmap из указанного потока данных.

Инициализирует новый экземпляр класса Bitmap из указанного потока данных.

Инициализирует новый экземпляр класса Bitmap из указанного файла.

Инициализирует новый экземпляр класса Bitmap из указанного файла.

Инициализирует новый экземпляр класса Bitmap из указанного ресурса.

Свойства

Возвращает флаги атрибутов для пиксельных данных этого объекта Image.

Возвращает массив идентификаторов GUID, представляющих размеры кадров в объекте Image.

Возвращает высоту объекта Image в пикселях.

Возвращает горизонтальное разрешение объекта Image в пикселях на дюйм.

Возвращает или задает палитру цветов, используемую для объекта Image.

Возвращает ширину и высоту данного изображения.

Возвращает формат пикселей для этого объекта Image.

Возвращает идентификаторы элементов свойств, хранящихся в объекте Image.

Возвращает все элементы свойств (части метаданных), хранящихся в объекте Image.

Возвращает формат файла этого объекта Image.

Возвращает ширину и высоту изображения в пикселях.

Возвращает или задает объект, предоставляющий дополнительные данные об изображении.

Возвращает вертикальное разрешение объекта Image в пикселях на дюйм.

Возвращает ширину объекта Image в пикселях.

Методы

Создает точную копию данного объекта Image.

Создает копию раздела этого объекта Bitmap, определяемого структурой Rectangle и с указанным перечислением PixelFormat.

Создает копию части этого изображения Bitmap, определяемого заданным перечислением PixelFormat.

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

Освобождает все ресурсы, используемые этим объектом Image.

Освобождает неуправляемые ресурсы, используемые объектом Image, а при необходимости освобождает также управляемые ресурсы.

Определяет, равен ли указанный объект текущему объекту.

Создает изображение Bitmap для значка из дескриптора Windows.

Создает изображение Bitmap из указанного ресурса Windows.

Возвращает границы изображения в указанных единицах измерения.

Возвращает информацию о параметрах, поддерживаемых указанным кодировщиком изображения.

Возвращает количество кадров указанного размера.

Служит хэш-функцией по умолчанию.

Возвращает дескриптор для значка.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

Возвращает цвет указанного пикселя в этом изображении Bitmap.

Возвращает указанный элемент свойства из объекта Image.

Возвращает эскиз для этого объекта Image.

Возвращает объект Type для текущего экземпляра.

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

Блокирует объект Bitmap в системной памяти.

Блокирует объект Bitmap в системной памяти.

Делает прозрачным прозрачный цвет по умолчанию для этого элемента Bitmap.

Делает заданный цвет прозрачным для данного изображения Bitmap.

Создает неполную копию текущего объекта Object.

Создает неполную копию текущего объекта MarshalByRefObject.

Удаляет указанный элемент свойства из этого Image.

Поворачивает, зеркально отражает, либо поворачивает и зеркально отражает объект Image.

Сохраняет данное изображение в указанный поток с заданным кодировщиком и определенными параметрами кодировщика изображения.

Сохраняет данное изображение в указанный поток в указанном формате.

Сохраняет объект Image в указанный файл или поток.

Сохраняет объект Image в указанный файл с заданным кодировщиком и определенными параметрами кодировщика изображения.

Сохраняет объект Image в указанный файл в указанном формате.

Добавляет кадр в файл или поток, указанный в предыдущем вызове метода Save. Используйте данный метод для сохранения выбранных кадров из многокадрового изображения в другое многокадровое изображение.

Добавляет кадр в файл или поток, указанный в предыдущем вызове метода Save.

Выделяет кадр, определяемый размером и индексом.

Задает цвет указанного пикселя в этом объекте Bitmap.

Сохраняет элемент свойства (часть метаданных) в Image.

Задает разрешение для этого изображения Bitmap.

Возвращает строку, представляющую текущий объект.

Разблокирует это изображение Bitmap из оперативной памяти.

Явные реализации интерфейса

Заполняет объект SerializationInfo данными, необходимыми для сериализации целевого объекта.

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • Windows bios oem key что это
  • Windows bios flash utility что это
  • Windows bind filter driver что это
  • Windows bind filter driver что это за программа
  • Windows binary что это

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии