2010-06-11 3 views
3

Как создать объект Bitmap из объекта Graphics? Я хотел бы читать пиксели из моего объекта Graphics. например, System.Drawing.BitMap.GetPixel().Как создать объект Bitmap из объекта Graphics?

Я пытаюсь найти пустую область (весь белый или любой цвет) внутри pdf-документа, чтобы написать некоторую графику/изображение. Я так пробовал, но он не работает. почему следующий код работает не так, как ожидалось?

// 
// System.Drawing.Bitmap 
// System.Drawing.Graphics 
// 
Bitmap b = new Bitmap(width, height, graphics); 

// 
// In this case, for any (i, j) values, Bitmap.GetPixel returns 0 
// 
int rgb = b.GetPixel(i, j).ToArgb(); 

(размещение на этот вопрос снова в .net только для контекста, удаление других зависимостей библиотеки)

ответ

0

В идеале вы хотите, чтобы избежать GetPixel/SetPixel и использовать небезопасные методы доступа к растровому изображению для некоторой скорости.

System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage (bitmap);

затем используйте графический экземпляр. Если я помню, изменение графического объекта изменяет растровое изображение.

+0

благодарит за ваш отзыв, MaLio. пожалуйста, напишите мой комментарий (в ответ Белоусову Павлу) выше. –

0

Сначала вы должны создать растровое изображение, затем создать графику из этого растрового изображения, работать с графикой и после этого сохранить (или работать с ним) растровое изображение.

Ваш код будет выглядеть следующим образом:

using (Bitmap image = new Bitmap(X, Y)) 
{ 
    using (Graphics gr = Graphics.FromImage(image)) 
    { 
     // work with graphics, Draw objects 
    } 
    image.Save("YourPathToFile"); // Or GetPixel, if you want 
} 

Ваш код не работает, как вы освобожденный из-за конструктор Bitmap получает графики только для разрешения. MSDN говорит Initializes a new instance of the Bitmap class with the specified size and with the resolution of the specified Graphics object.

+0

благодарит за ваш отзыв, Белоусов. - У меня уже есть графический объект, построенный из pdf (и у меня нет соответствующего объекта растрового изображения, потому что рендеринг не является интересом моей библиотеки pdf). Я просто хочу читать пиксели, и я не хочу писать/рисовать. Мне нужен растровый объект для чтения пикселей, поэтому я пытаюсь построить объект bitmap из графического объекта, который у меня есть. - При записи в System.Drawing.Graphics объект настолько прост, что чтение пикселей из него было сделано намеренно невозможным. –

0

(очень поздно, но ...)

Вы пробовали

var bmp = System.Drawing.Bitmap.FromHbitmap(gr.GetHdc()); 

Тогда вы можете прочитать пиксели bmp.

+1

Throws System.Runtime.InteropServices.ExternalException для меня. – Michael

+0

Выбрасывает «Общая ошибка в GDI +» –

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