2016-04-22 3 views
-1

Я создал растровое изображение с использованием CreateDIBSection и указанного .biWidth = 100; .biHeight = 100, как этот псевдо-код:Изменение размера растрового изображения без создания нового растрового изображения

pBitmapInfo->bmiHeader.biWidth = 100; 
pBitmapInfo->bmiHeader.biHeight = 100; 
.... 
CreateDIBSection(DibDC, pBitmapInfo, DIB_RGB_COLORS, 0, 0, 0); 

Позже, я хочу, чтобы повторно использовать растровое изображение, просто измените размер растрового изображения 300x100 (и может очистить старое изображение, потому что я не нужен больше). Многие говорят, что мне нужно создать новое растровое изображение с новым размером и удалить старое растровое изображение. Но в любом случае я ожидал, что мы сможем повторно использовать старый растровый файл. Я не хочу воссоздавать новое растровое изображение, потому что это приводит к низкой производительности, в то время как мне нужно делать это много раз. Итак, есть ли способ изменить размер растрового изображения без повторного создания нового растрового изображения?

+0

Если вам нужно растровое изображение в двух размерах, я бы создал два растровых изображения. Изменение размера, вероятно, выглядит плохо. Вам не нужно много раз создавать что-либо, просто пусть каждый растровый образ «живет» до тех пор, пока он необходим. –

+0

Какую среду вы используете? Конечно, не все VB/C/C++/Delphi .... Я бы предложил удалить все те теги и просто добавить 'WinAPI'. – Johan

+0

Подобно строкам, растровые изображения неизменяемы. После создания они не могут быть изменены. Однако вы можете отображать только часть растрового изображения или растягивать его с помощью 'StretchBlt'. – IInspectable

ответ

0

Если вы беспокоитесь о производительности, то действительно не рекомендуется продолжать уничтожать и создавать растровые изображения.

Однако есть более легкое решение. Просто создайте пул растровых изображений в предопределенных размерах и используйте растровые изображения из пула по мере необходимости.

Если у вас есть долгоживущие DC, вы можете использовать:

hBitmap100x100 = CreateCompatibleBitmap(MyDC, 100,100); 
hBitmap300x300 = CreateCompatibleBitmap(MyDC, 300,300); 

Если вы сохранить изменения питания постоянного тока используйте раздел DIB

hBitmap100x100 = CreateDIBSection(DibDC, pBitmapInfo100x100, DIB_RGB_COLORS, null, 0, 0); 
hBitmap300x300 = CreateDIBSection(DibDC, pBitmapInfo100x100, DIB_RGB_COLORS, null, 0, 0); 

Просто многократно использовать их снова и снова.
Вы можете даже иметь дюжину из них в массиве, если хотите.
Вы создаете их при запуске программы и удаляете их по завершении.

+0

'MyDC' - временный ресурс, который будет часто меняться во время исполнения (и вообще не существует); эти растровые изображения должны быть разделами DIB, а не совместимыми растровыми изображениями. – andlabs

+0

Большое вам спасибо, Йохан, я очень ценю этот альтернативный метод. Я предварительно проверил и нашел, что этот метод значительно увеличивает мою производительность. Я делаю еще несколько тестов, прежде чем отметить этот ответ как лучший. – DucFabulous