Member 12763843 Ответов: 1

Могу ли я нарисовать растровое изображение в WPF и заполнить цвет пиксель за пикселем в WPF?


я пытаюсь нарисовать растровое изображение в wpf и заполнить все изображение своим собственным списком цветов по пикселям...то есть необходимым цветом для любого конкретного пикселя...


может ли кто-нибудь помочь с полным кодом, так как я новичок в wpf...

Что я уже пробовал:

вот код, который я попробовал...

WriteableBitmap wbitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, myPalette);
byte [,,] pixels = новый байт[высота, ширина, 4];

// Ясно до Черного.
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
for (int i = 0; i < 3; i++)
пиксели[row, col, i] = 0;
пиксели[row, col, 3] = 255;
}
}

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

[no name]

Это не написание кода для заказа сайта.

Member 12763843

@NotPoliticallyCorrect ur принимает меня неправильно, сэр.... я новичок в wpf, поэтому я хочу помочь, если у вас есть какие-либо проблемы, я тогда прошу прощения за это.

[no name]

Нет, я не ошибаюсь. "может ли кто-нибудь помочь с полным кодом" - это просьба к кому-то написать ваш код для вас. Быть "новичком в WPF" не означает, что кто-то собирается написать кучу кода и передать его вам. Что ты наделал? Где ваш код? В чем проблема с вашим кодом?

Member 12763843

ну, если вы спросите, Это мой код....

WriteableBitmap wbitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, myPalette);
byte [,,] pixels = новый байт[высота, ширина, 4];

// Ясно до Черного.
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
for (int i = 0; i < 3; i++)
пиксели[row, col, i] = 0;
пиксели[row, col, 3] = 255;
}
}
но я не уверен, как заполнить пользовательский цвет в растровом изображении

1 Ответов

Рейтинг:
8

Jochen Arndt

Вы можете использовать один из WritePixels методы (которые требуют подготовки прямоугольника) или получения указателя на буфер пикселей (Свойство WriteableBitmap.BackBuffer (System.Окна.Средства массовой информации.Изображений)[^]) и установите данные в буфер.

Первое решение см. WriteableBitmap.Метод WritePixels (Int32Rect, Array, Int32, Int32) (System.Окна.Средства массовой информации.Изображений)[^] который имеет пример кода для обновления одного пикселя.

Для второго варианта этот блог может быть полезен: Блог Энди: манипулирование задним буфером WriteableBitmap[^]


Member 12763843

@jochenArndt thaks для вашего ответа.... но я запутался, как использовать этот метод для заливки цветом?

Jochen Arndt

С помощью первого метода просто установите массив ColorData в соответствующие значения R, G, B и Alpha.

Аналогично со вторым методом, где указатель на буфер может быть обработан как 32-битное целое число, содержащее данные цвета в формате BGRA32 или структуре PixelColour, или обработан как байт с:
ptr[0] = B_value;
ptr[1] = G_value;
ptr[2] = R_value;
ptr[3] = A_value;

Member 12763843

можете ли вы сказать мне на примере, как я могу создать желтый цвет и поместить его на любой конкретный пиксель??
заранее спасибо

Member 12763843

@jochenArndt спасибо за вашу помощь... я успешно создал растровое изображение с тремя основными цветами красный синий зеленый теперь задача состоит в том, как заполнить цвета, отличные от этих трех.....

Jochen Arndt

Вы знаете, как изображаются цвета?
Каждое значение RGB может находиться в диапазоне от 0 до 255 (интенсивность). Комбинируйте различные значения, чтобы создать цвета из 16М возможных комбинаций.

Member 12763843

можете ли вы сказать мне на примере, как я могу создать желтый цвет и поместить его на любой конкретный пиксель??
заранее спасибо

Jochen Arndt

Желтый-это синий ноль, а красный и зеленый имеют одинаковое значение. Ярко-желтый - R=255, G=255, B=0. Средняя интенсивность, например, R=128, G=128, B=0.

Назначьте эти значения указателю байта с соответствующим смещением цвета или членам ColourData.

Просто поищите в интернете цветные диаграммы или таблицы RGB:
https://en.wikipedia.org/wiki/RGB_color_model

Member 12763843

спасибо тебе, брат, за помощь...