All streams
Search
Write a publication
Pull to refresh
156
0
Владимир @3fonov

User

Send message
Тоже спасибо. Это было в скрипте для фотошопа. Забыл добавить в туду.
Спасибо, учту.
Как раз хотел написать. :-)
Уже достаточно давно. Посмотрите внимательнее.
Многое от банка зависит. Мне банк сам перевыпустил карту и прислал заказным письмом за месяц до окончания действия первой.

Очень много покупок делаю по пластиковой карте. Процентов 60. Но согласен. Очень напрягают маленькие магазинчики с дорогими вещами. Таскать пачки денег из банкомата, который решил выдать мелкими купюрами, не очень удобно :)
У меня преобразование картинки в ее собственный альфа-канал (т.е. картинка становится однотонной, а изображение переносится в канал прозрачности) с использованием матрицы заняло в пять раз больше времени, чем с использованием unsafe.
Возможно, но так не намного понятнее:
BitmapData resultData = result.LockBits(new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), result.Size),
                      ImageLockMode.ReadWrite,
                      System.Drawing.Imaging.PixelFormat.Format32bppArgb);


* This source code was highlighted with Source Code Highlighter.

Надо просто комментариев больше писать. :)
Я вот смотрю и думаю: где же лежат мои 8мс. :) Мозг взрывает.
Не заметил сперва ваш размер картинки. С размер 360×480 — 8мс.
Вот вариант с unsafe. У меня на Pentium D 3Ггц c картинкой 3000×3000 занимает около 340 миллисекунд.

  1. Bitmap MakeBW(Bitmap source)
  2.     {
  3.       //использование промежуточных переменных ускоряет
  4.       //код в несколько раз
  5.       var width = source.Width;
  6.       var height = source.Height;
  7.  
  8.       var sourceData = source.LockBits(new Rectangle(new System.Drawing.Point(0, 0), source.Size),
  9.                        ImageLockMode.ReadOnly,
  10.                        source.PixelFormat);
  11.      
  12.       result = new Bitmap(width, height, source.PixelFormat);
  13.       var resultData = result.LockBits(new Rectangle(new System.Drawing.Point(0, 0), result.Size),
  14.                        ImageLockMode.ReadWrite,
  15.                        source.PixelFormat);
  16.  
  17.  
  18.       var sourceStride = sourceData.Stride;
  19.       var resultStride = resultData.Stride;
  20.  
  21.       var sourceScan0 = sourceData.Scan0;
  22.       var resultScan0 = resultData.Scan0;
  23.  
  24.       var resultPixelSize = resultStride / width;
  25.      
  26.       unsafe
  27.       {
  28.         for(var y = 0 ; y < height ; y++)
  29.         {
  30.           var sourceRow = (byte*)sourceScan0 + (y * sourceStride);
  31.           var resultRow = (byte*)resultScan0 + (y * resultStride);
  32.           for(var x = 0 ; x < width ; x++)
  33.           {
  34.             var v =(byte)(0.3*sourceRow[x*resultPixelSize + 2] + 0.59*sourceRow[x*resultPixelSize + 1] +
  35.                0.11*sourceRow[x*resultPixelSize]);
  36.               resultRow[ x * resultPixelSize ] = v;
  37.               resultRow[ x * resultPixelSize + 1 ] = v;
  38.               resultRow[ x * resultPixelSize + 2 ] = v;
  39.           }
  40.         }
  41.  
  42.  
  43.       }
  44.  
  45.       source.UnlockBits(sourceData);
  46.       result.UnlockBits(resultData);
  47.       return result;
  48.     }
* This source code was highlighted with Source Code Highlighter.
Мне тоже кажется, что unsafe будет ничуть не медленнее, хотя нужно проверить. Плюс к этому в шарпе можно использовать Parallel Extensions.

Я как раз сейчас борюсь с долгой инициализацией больших картинок в WPF. При динамическом обновлении Image-контрола картинкой размером 3000×3000 задержка в трэде рисование почти полсекунды. Что, при обновление раз в секунду, делает интерфейс не юзабельным. Никто не сталкивался с таким?
Стормозил.
Windows Presentation Foundation
img.3fonov.ru/binding.xaml

Идея в том, чтобы сделать мультитриггер и в нем проверить выбран ли элемент и есть ли над ним мышь.
Нельзя ли сделать стиль ListBox'a в котором задать ControlTemplate, обрабатывающий OnMouseEnter и IsSelected?
Согласен Crush: PDF не выход. у него формат страницы больше + поля. Их можно обрезать в акробате, но это все равно плохочитабельно. На мой взгляд вряд ли какая-нибудь книжка меньше формата А4 будет воспроизводить PDF адекватно. А конвертировать из-за сложной верстки его практически не реально.
Промахнулся с ответом. См. ниже.
Про txt думаю.

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

А про универсальный конвертер я думаю, но пока не могу оформить стройную систему. :)
Проекту всего две недели. Потому и не знали :)

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Fullstack Developer, Data Engineer
Software development
Design information systems
SQL
Python