2010-02-05 2 views
1

мне было интересно, если кто-нибудь знал способ обнаружить, когда изображение копируется в буфер обмена, то выполните следующие действия, когда это произойдет:Преобразовать буфер в GIF/PNG, когда буфер обмена содержит изображение

  • Преобразовать эту картину в GIF/PNG
  • Затем положить обратно эту сжатую картинку в буфер обмена

причина Я спрашиваю, что мы часто копируют вставки скриншотов для пользователей и вставить их в Lotus. По какой-то причине приклеивание непосредственно изображения в Lotus делает больше писем, чем вставка в Paint saving как GIF, копирование из GIF, а затем вставку в Lotus.

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

Не стесняйтесь исправить меня, если я ошибаюсь!

EDIT:

После чтения первого ответа, мой вопрос: «Как я могу, каждый раз, когда изображение находится в буфере обмена, сжать его и положить его обратно в буфер обмена?»

ответ

1

Предполагая, что это находится в Windows, буфер обмена stores the image в несжатой форме. GIF - это формат сжатого файла изображения, поэтому он выполняет сжатие, поэтому файлы меньше.

+0

Отредактированный мой вопрос: это будет потом ... как я могу сжать изображение на лету, когда она берется из буфера обмена и положить его обратно в буфер обмена – BlueTrin

0

Если вы ищете решение Lotus Notes, в зависимости от того, какая версия Lotus Notes вы используете, предпочтение отдается «Сжатие изображений, вставленных в документы». Я думаю, который пришел в версии 8.0, но я мог ошибаться. Кроме того, я не знаю ничего, что вы могли бы использовать.

Я только что проверил скрининг скриншота в черновик письма, а сохраненный черновик - 124 КБ. Вложил скриншот в Paint и сохранил его как GIF, который был 163KB-файлом.

+0

EDIT: Я хотел бы наша команда Лотус обновит клиенты, мы все еще используем Lotus здесь: ( – BlueTrin

0

Я использую следующую программу C# для аналогичной цели. Он сохраняет буфер обмена в файл PNG. Затем я загружаю файл в Gmail или что-то еще.

class Clip2Png { 
[System.STAThread] 
public static void Main(string[] args) { 
    if (args.Length != 1) { 
     System.Console.WriteLine("Usage: clip2png filename"); 
     return; 
    } 

    System.Windows.Forms.IDataObject lData = System.Windows.Forms.Clipboard.GetDataObject(); 
    if (lData == null || !lData.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap)) { 
     System.Console.WriteLine("No image in clipboard"); 
     return; 
    } 

    System.Drawing.Image image = (System.Drawing.Image) 
      lData.GetData(System.Windows.Forms.DataFormats.Bitmap, true); 
    image.Save(args[0], System.Drawing.Imaging.ImageFormat.Png); 
} 
} 
+0

EDIT, это было бы очень близко к тому, что я хочу, за исключением того, что я хотел бы вернуть его в буфер обмена, знаете ли вы, как я мог это сделать? – BlueTrin

+0

См. @unwind answer - буфер обмена хранит изображения DIB. Это приложение определяет, что делать с буфером обмена - например, мое приложение сохраняет его как PNG-файл в качестве последнего шага. – agsamek

+0

Lotus прикрепляет его как несжатое изображение. Где вы можете вставить содержимое буфера обмена как GIF из любого приложения в Lotus? Я так не думаю. Скорее всего, вы смогли прикрепить GIF-файл с hdd, и в этом случае Lotus сохраняет его как GIF в письме. – agsamek