Использование Системы. Рисунок, как я могу потянуть что-то, что подражает эффекту желтого маркера выделения?

Я хочу то, что находится "позади" желтого для показа через.

РЕДАКТИРОВАНИЕ 1: Но, если бы я продвигаюсь "белый", я хотел бы, чтобы цвет маркера сохранил свою чистую желтость.

РЕДАКТИРОВАНИЕ 2: ответ @Kevin, вероятно, корректен, и я отметил его корректный, даже при том, что я не кодировал его. В моем коде я соглашаюсь на ответ @Guffa, с помощью Цвета. FromArgb.

РЕДАКТИРОВАНИЕ 3: Я отправил код, который работает с достойной производительностью. Да, вычитание синего является основной идеей, но Вы не можете сделать этого с API высокого уровня, и SetPixel является слишком медленным. Решение с хорошей производительностью использует Битовый массив. LockBits, UnlockBits.

6
задан Corey Trager 19 December 2010 в 06:37
поделиться

4 ответа

Вам следует попробовать продукт под названием Velocity компании Glorsoft. www.glorsoft.com Это .NET DLL и работает действительно хорошо. Вам потребуется Dialogic board или Dialogic HMP. Вы можете забрать эти дешевые на eBay.

Вы также можете посмотреть на компанию под названием Eurovoice. Есть инструментарий на базе Com. Www.eurovoice.co.uk - они используют платы Dialogic и Pika.

Существует также CT ADE, который теперь принадлежит Syntellect.

Есть много других инструментов, доступных вам, но это те, с которыми я больше всего знаком.

По своему опыту я не стал бы тратить время на TAPI или голосовые модемы.

-121--4817562-

Можно исключить целые каталоги или деревья каталогов с "* *" и исключить. Пример

<dirset dir="aDirectory">
    <include name="a/package/**"/>
    <exclude name="**/package/to/exclude**"/>
</dirset>
-121--4154798-

Индикатор является пигментом, поэтому он по существу вычитается - вы хотите превратить белый в желтый, но не черный в желтый. Я не знаю .NET, но что вы хотите, это не по умолчанию "режим смешения", в частности вычесть . В частности, установите режим наложения для вычитания, а цвет - чистый синий (цвет, который требуется вычесть, оставляя желтый). Черный останется один, так как нет синего для вычитания, и белый станет желтым.

К сожалению, во многих современных интерфейсах рисования отсутствуют режимы смешения, отличные от альфа, и похоже, что это может быть один из них. При наличии доступа к растровому изображению его можно реализовать самостоятельно - взять каждое значение пикселя и установить синий компонент на ноль. Или если область, которую вы хотите выделить, сложна, то: сделайте копию своего изображения, нарисуйте черный цвет над выделенной областью в копии, затем объедините красный и зеленый каналы из оригинала и синий канал из копии в окончательное изображение результата.

9
ответ дан 8 December 2019 в 16:02
поделиться

Ваш второй пример неверен, потому что каждая ячейка памяти концептуально будет содержать не символ * , а символ . Если немного изменить свое мышление, это может помочь с этим:

char *x;  // Memory locations pointed to by x contain 'char'
char **y; // Memory locations pointed to by y contain 'char*'

x = (char*)malloc(sizeof(char) * 100);   // 100 'char'
y = (char**)malloc(sizeof(char*) * 100); // 100 'char*'

// below is incorrect:
y = (char**)malloc(sizeof(char) * 50 * 50);
// 2500 'char' not 50 'char*' pointing to 50 'char'

Из-за этого ваш первый цикл будет то, как вы делаете в C массив символьных массивов/указателей. Использование фиксированного блока памяти для массива символьных массивов является нормальным, но вместо char * * используется char * * , так как в памяти не будет указателей, просто char s.

char *x = calloc(50 * 50, sizeof(char));

for (ii = 0; ii < 50; ++ii) {
    // Note that each string is just an OFFSET into the memory block
    // You must be sensitive to this when using these 'strings'
    char *str = &x[ii * 50];
}
-121--2616262-

Используется полупрозрачный цвет, например, с 50% альфа-непрозрачностью:

Color.FromArgb(128, Color.Yellow)

При более низком альфа-значении больше фона будет отображаться через.

-121--4195995-

Попробуйте использовать SolidBrush , инициализированный значением Color с альфа-значением меньше 255. Это должно создать полупрозрачную кисть используемого цвета.

0
ответ дан 8 December 2019 в 16:02
поделиться

Вы используете полупрозрачный цвет, например, с непрозрачностью 50% альфа:

Color.FromArgb(128, Color.Yellow)

При меньшем значении альфа больше фона будет просвечивать.

3
ответ дан 8 December 2019 в 16:02
поделиться

Это код, который вам нужен:

    protected override void OnPaint( PaintEventArgs e )
    {
        using ( var bmp = new Bitmap( 100, 100 ) )
        using ( var g = Graphics.FromImage( bmp ) )
        using ( var ia = new ImageAttributes() )
        {
            // 1. create a sample bitmap
            g.Clear( Color.White );
            var p = Point.Empty;
            foreach ( var color in new Color[] { Color.Black, Color.Gray, Color.LightBlue, Color.Green, Color.Red, Color.Magenta } )
                using ( var brush = new SolidBrush( color ) )
                {
                    g.DrawString( "Some sample text", SystemFonts.DefaultFont, brush, p );
                    p.Offset( 0, 16 );
                }
            // 2. transfer the bitmap on screen
            e.Graphics.DrawImage( bmp, Point.Empty );
            // 3. transfer a part of the bitmap on screen again, this time removing all blue
            ia.SetColorMatrix( new ColorMatrix( new float[][] {
                        new float[] {1, 0, 0, 0, 0},
                        new float[] {0, 1, 0, 0, 0},
                        new float[] {0, 0, 0, 0, 0},
                        new float[] {0, 0, 0, 1, 0},
                        new float[] {0, 0, 0, 0, 1}} ) );
            e.Graphics.DrawImage(
                bmp,
                new Rectangle( 30, 0, 40, 100 ),
                30, 0, 40, 100,
                GraphicsUnit.Pixel,
                ia );
        }
    }
2
ответ дан 8 December 2019 в 16:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: