2009-05-24 4 views
4

Изображение скопировано из Firefox в буфер обмена. Моя программа получает его из буфера обмена и сохраняет как изображение в формате JPEG. По какой-то причине изображение сохраняется с черным фоном. Если я открою тот же URL-адрес в IE и скопирую изображение в буфер обмена, изображение будет правильно сохранено моей программой. Я использую Delphi 7.Черный фон при копировании изображения из Firefox

Я также попытался скопировать изображение из Firefox в Microsoft Paint и снова на черный фон. Кто-нибудь имеет подсказку в том, как справиться с такой проблемой.

+0

Итак, вопрос в том, как определить прозрачность в DIB? Firefox просто помещает DIB в буфер обмена. Исходным изображением является PNG. Я хотел бы знать, как я могу обнаружить в DIB, если он имеет прозрачность или нет. –

+0

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

+1

Это ограничение в том, как Firefox копирует вещи в буфер обмена. –

ответ

2

Я предполагаю, что исходное изображение прозрачное? Если это так, вы должны знать, что JPEG не может обрабатывать прозрачность. Попробуйте переключить тип выходного изображения и посмотреть, будет ли программа волшебным образом уходить.

+0

Не работает. Я попытался сохранить PNG и GIF безрезультатно. Проблема заключается в том, что DIB загружается в TPicture. Как-то я должен определить, что изображение имеет прозрачность или нет, и обрабатывать его. Это мой вопрос. –

+0

TBH, я не понимаю, почему вы копируете вещи в буфер обмена и т. Д. - не можете ли вы просто извлечь изображение из URL-адреса, таким образом вырезая среднего человека firefox, что потенциально вызывает проблемы? – Pod

+0

Моя программа действует как улавливатель буфера обмена. Он не видит Firefox, но что находится в буфере обмена. Проблема заключается в том, как обрабатывать изображение, скопированное из Firefox. –

1

Если вы получаете тот же фон в своей программе и Paint, то это говорит мне, что это как-то связано с Firefox, и, следовательно, это не обязательно ваша проблема.

Поскольку вы обеспокоены цветом фона, я думаю, что изображение, которое вы копируете, имеет прозрачные элементы. Так скажите мне: Какой цвет должен быть там? Изображение JPEG не может иметь прозрачные части, поэтому каждый пиксель должен иметь цвет. Firefox, по-видимому, выбирает черную там; как это не правильный выбор, а Internet Explorer?

Интересно, какой цвет фона вы получаете, когда вставляете в более подходящую графическую программу, чем Paint, например Gimp или Photoshop. Я ожидал бы, что эти программы рассмотрят несколько clipboard formats и выберите наиболее подходящий формат, чтобы они могли выбрать формат, который обеспечивает прозрачность, когда он доступен. С другой стороны, ваша программа и Paint, возможно, просто используют формат cf_Bitmap, который, конечно же, не может иметь прозрачные пиксели, поэтому они получают то, что программа копирования использовала для заполнения пустого пространства.

Кстати, Firefox и Internet Explorer позволяют перетаскивать изображение непосредственно из браузера на рабочий стол или в другое окно папки, чтобы сохранить исходное изображение. Может быть, это делает вашу программу ненужной?

+0

Rob, моя программа захватывает содержимое буфера обмена, когда что-то копируется в него. Firefox просто помещает изображение в два формата, DIB и еще один, который я не помню прямо сейчас. Я имею дело с DIB. –

+0

Какой другой формат? –

+0

Роб, я не знаю, правильно ли здесь ответить на ваш вопрос. Я новичок в StackOverflow. Другой формат, который Firefox помещает в буфер обмена, кажется родным: application/x-moz-nativeimage. Я должен придерживаться CF_DIB. –

1

Я знаю, что это немного старый вопрос, но я только что столкнулся с той же проблемой в Firefox v9.

Используйте следующее обходное решение: сохраните соответствующее изображение на свой компьютер, затем скопируйте файл в проводник и вставьте в программу, которую хотите использовать (в моем случае я вставил в слово).

Смежные вопросы