Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2009, 06:54   #1
CrazyProgramer
Заблокирован
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 23
По умолчанию Вопрос по GDI+ (почитать в поток/буфер)

Привет.
Код:
var 
  image: GPIMAGE;
  .
begin
  .
  GdipCreateBitmapFromHBITMAP(HBMP, 0, image);
  .
end;
Подскажите, пожалуйста, как получить указатель на начало и размер данных получившегося битмапа?

Последний раз редактировалось CrazyProgramer; 06.01.2009 в 08:16.
CrazyProgramer вне форума Ответить с цитированием
Старый 06.01.2009, 10:44   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

GetObject() если это у тебя hbitmap

Код:
  
var bi : tagBITMAP;
begin
  ZeroMemory(@bi, SizeOf(bi));;
  GetObject(bitmap, SizeOf(bi), @bi);
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 06.01.2009, 11:32   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

GdipBitmapLockBits
BOBAH13 вне форума Ответить с цитированием
Старый 06.01.2009, 16:56   #4
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

ой, плюс не заметил, а то смотрю что-то не то
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 06.01.2009, 20:14   #5
CrazyProgramer
Заблокирован
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 23
По умолчанию

Спасибо, но мало чего понятно конешно...
Код:
var
  token: dword;
  input: TGdiplusStartupInput;
  image: GPIMAGE;
  Clsid: TGUID;
  hBMP   : HBITMAP;
  oldObj : HGDIOBJ;
  DESCDC : HDC;
  memDC  : HDC;
begin
  DESCDC := GetDC(0);
  memDC  := CreateCompatibleDC(DESCDC);
  hBMP   := CreateCompatibleBitmap(DESCDC, Screen.Width, Screen.Height);
  oldObj := SelectObject(memDC, hBMP);
  BitBlt(memDC, 0, 0, Screen.Width, Screen.Height, DESCDC, 0, 0,   SRCCOPY);
  image := nil;
  FillChar(input, SizeOf(input), 0);
  input.GdiplusVersion := 1;
  GdiplusStartup(token, @input, nil);
  GdipCreateBitmapFromHBITMAP(hBMP, 0, image);
  GetEncoderClsid('image/png', Clsid);
  //GdipSaveImageToFile(image, 'C:\1.png', @ClsId, nil);
  //Сдесь надо заместо сохранения в файл, прочитать в буфер!
  GdipDisposeImage(image);
  GdiplusShutdown(token);
  SelectObject(memDC, oldObj);
  DeleteObject(memDC);
  DeleteObject(hBMP);
  ReleaseDC(GetDesktopWindow(), DESCDC);
end;
Можно поподробнее, обьяснить как это сделать? С gdip первый раз просто столкнулся, оч. надо, или ссыль какунито где прочитать можно поподробнее про неё).
CrazyProgramer вне форума Ответить с цитированием
Старый 06.01.2009, 20:40   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от CrazyProgramer Посмотреть сообщение
Спасибо, но мало чего понятно конешно...
Ну как обычно кому была написана функция (мой пост)... просто игнорируем ? ну да ладно вот смотрите..

Код:
var
  Bitmap: GpBitmap;
  BitmapData: TBitmapData;
  r: TGPRectF;
  Stream: TMemoryStream;
begin
  r.X := 0;
  r.Y := 0;
  r.Width := 100;
  r.Height := 50;
  GdipCreateBitmapFromScan0(100, 50, 100 * 4, PixelFormat32bppARGB, NIL, Bitmap);
  GdipBitmapLockBits(Bitmap, @r, ImageLockModeRead or ImageLockModeWrite,
    PixelFormat32bppARGB, @BitmapData);

  Stream := TMemoryStream.Create;
  Stream.Write(BitmapData.Scan0^, 100 * 50 * 4);
  // do something
  Stream.Free;

  GdipBitmapUnlockBits(Bitmap, @BitmapData);
  GdipDisposeImage(Bitmap);
end;
вроде так... а то как не чтобы в файл а поток, тут надо смотреть в сторону IStream... тем более есть метод в GDI+ сохранение в поток GdipSaveImageToStream. Про то как совместить IStream с TStream в сети информация такая есть, так что ищем.

p.s. какая то не состыковка выходит... вы пишете что "вместо сохранения..," надо "прочитать"... ну сохранение - это запись, так вы уже определитесь вы пишите или читаите ?
BOBAH13 вне форума Ответить с цитированием
Старый 06.01.2009, 22:10   #7
CrazyProgramer
Заблокирован
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 23
По умолчанию

BOBAH13, спасибо, теперь оч. даже понятно!
Цитата:
Ну как обычно кому была написана функция (мой пост)... просто игнорируем ?
Нет, просто впервой с gdip столкнулся, а документации никакой по ней нету у меня(только пару демок нашел), поэтому и написал так...
Цитата:
p.s. какая то не состыковка выходит... вы пишете что "вместо сохранения..," надо "прочитать"... ну сохранение - это запись
Вроде всё верно, имел ввиду почитать сконвертированную картинки в сторонний буфер.
Только вот как бы мне для png это сделать

Последний раз редактировалось CrazyProgramer; 06.01.2009 в 22:54.
CrazyProgramer вне форума Ответить с цитированием
Старый 06.01.2009, 23:04   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

GdipBitmapLockBits - вернет буфер в формате какой вы указали. А чтобы конвертированный в png буфер получить это надо как я сказал GdipSaveImageToStream используя IStream. В чем проблема вообщем ?
BOBAH13 вне форума Ответить с цитированием
Старый 06.01.2009, 23:41   #9
CrazyProgramer
Заблокирован
Пользователь
 
Регистрация: 14.07.2008
Сообщений: 23
По умолчанию

Цитата:
Про то как совместить IStream с TStream
Дело в том что нужно было делать без Classes...
Цитата:
В чем проблема вообщем ?
Нивчем, разобрался уже... нашел код, правдо, на буржуйском и на VB, переписал на делф, вроде робит!
Спасибо за участие, Закрыто.

Последний раз редактировалось CrazyProgramer; 06.01.2009 в 23:44.
CrazyProgramer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что почитать? StakanpORTvejna PHP 2 22.10.2008 14:15
DirectX Чего-нибудь почитать Д'якон Свободное общение 2 21.07.2008 17:37
GDI EdNovice Win Api 4 12.02.2008 09:14