Меню

Как изменить цвет bitmap



Как изменить цвет bitmap

Здравствуйте.
Если у битмапа установить свойства:
Bitmap.HandleType := bmDIB;
Bitmap.PixelFormat := pf8bit;
То при отображениии картинки будет использоваться палитра, которая поумолчанию содержит 16 системных цветов, все остальные элементры палитры черный цвет.
Как поменять палитру так, чтобы были только цвета градации серого (0 — черный, 255 — белый)?
Спасибо.


Анонимщик © ( 2004-08-27 16:39 ) [1]

В справке написано:

The example demonstrates using the TBitmap object.

To run this example, load the project file from the Help\Examples\Bitmap directory.

This example demonstrates changing the palette of a TBitmap object. A TBitmap is an encapsulation of the windows BITMAP and PALETTE which manages realizing of the palette automatically. The bitmap can be loaded from a .BMP file (LoadFromFile method) or a resource (LoadFromResourceName or LoadFromResourceID method) and saved back to a file (SaveToFile method). It can be drawn on a canvas by using the TCanvas» Draw or StretchDraw method. The size of the bitmap can be determined by using the Height and Width properties of TBitmap.

The example below illustrates the use of TBitmap’s Palette, LoadFromFile, Draw, Height, and Width. Be sure that a small bitmap file named bor6.bmp is present in the same directory as the .exe file.

VCL Reference
TBitmap example (bmpformu.pas)

object BmpForm: TBmpForm

Left = 311
Top = 321
Width = 466
Height = 334
Caption = «BmpForm»
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = «MS Sans Serif»
Font.Style = []
OnCreate = FormCreate
OnDestroy = FormDestroy
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 56
Top = 40
Width = 113
Height = 25
Caption = «Scramble Palette»
TabOrder = 0

OnClick = Button1Click
end
end

This is an example of using TBitmaps and is not intended to be an efficient method of tiling a form.

Читайте также:  Как имитировать цвет золота

//
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TBmpForm = class(TForm)
Button1: TButton;
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
< Private declarations >
Bitmap: TBitmap;
procedure ScrambleBitmap;

procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;
public
< Public declarations >
end;
var
BmpForm: TBmpForm;
implementation

procedure TBmpForm.FormCreate(Sender: TObject);
begin
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile(«bor6.bmp»);
end;
procedure TBmpForm.FormDestroy(Sender: TObject);
begin
Bitmap.Free;
end;
// since we»re going to be painting the whole form, handling this

// message will suppress the uneccessary repainting of the background
// which can result in flicker.
procedure TBmpform.WMEraseBkgnd(var m : TWMEraseBkgnd);
begin
m.Result := LRESULT(False);
end;
procedure TBmpForm.FormPaint(Sender: TObject);
var
x, y: Integer;
begin
y := 0;
while y 0 then

Bitmap.Palette := hpal;
finally
FreeMem(pal);
end;
end;
end.

Indicates the bit format of the bitmap image, specifying how the image is displayed and how the pixels of the bitmap image are stored in memory.

type TPixelFormat = (pfDevice, pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit, pfCustom);
property PixelFormat: TPixelFormat;

Use PixelFormat to change a TBitmap»s internal image to a particular memory format and color depth, or to find out what memory format and color depth a TBitmap is using.

For example, PixelFormat can be used to set the pixel format of the bitmap image to 8-bit for video drivers that cannot display the native format of a bitmap image.

Note: The PixelFormat of a JPEG image object applies to the bitmap if the JPEG image is copied to it.

Changing the pixel format is most commonly used with ScanLine, because your code must decode the pixel data accessed by ScanLine. Image-editing tools usually use one pixel for all internal image operations and copy the results to the screen (in whatever format) as the last step.

Читайте также:  Когда можно сеять семена цветов под зиму

Источник

Как изменить цвет bitmap

Бывалый

Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет

Есть Bitmap, необходимо в нём все пиксели чёрного цвета выкрасить в цвет, переданный в качестве параметра. Помогите плиз.

albert21
Дата 8.5.2008, 08:44 (ссылка) | (нет голосов) Загрузка .
mr.DUDA
Дата 8.5.2008, 09:55 (ссылка) | (нет голосов) Загрузка .

3D-маньяк

Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232

Код
void ПерекраситьБитмап(Bitmap bmp, Color color)
<
for (int y = 0; y

Бывалый

Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет

albert21
Дата 8.5.2008, 10:06 (ссылка) | (нет голосов) Загрузка .
mr.DUDA
Дата 8.5.2008, 10:22 (ссылка) | (нет голосов) Загрузка .

3D-маньяк

Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232

Код
using System.Drawing;
using System.Drawing.Imaging;

unsafe void ПерекраситьБитмапМетодомКтулху(Bitmap bmp, Color color)
<
int colorVal = color.ToArgb();
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
int *colors = (int*)(bmData.Scan0.ToPointer());
for (int i = 0; i

500mhz
Дата 8.5.2008, 12:31 (ссылка) | (нет голосов) Загрузка .

шайтан

Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14

mr.DUDA
Дата 8.5.2008, 12:50 (ссылка) | (нет голосов) Загрузка .

3D-маньяк

Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232

Бывалый

Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет

Отобразить на форме изменёнными.

Включение чекбокса «Allow unsafe code» не помогло. Пишет ошибку «Pointers and fixed size buffers may only be used in an unsafe context»

albert21
Дата 9.5.2008, 18:54 (ссылка) | (нет голосов) Загрузка .
500mhz
Дата 9.5.2008, 18:59 (ссылка) | (нет голосов) Загрузка .

шайтан

Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14

mr.DUDA
Дата 9.5.2008, 20:23 (ссылка) | (нет голосов) Загрузка .

3D-маньяк

Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232

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

500mhz, превед!
как там борьба с касторским ?
вирусов понаписали уже ?

Бывалый

Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет

albert21
Дата 10.5.2008, 16:34 (ссылка) | (нет голосов) Загрузка .
Прежде чем создать тему, посмотрите сюда:
  • Что же такое .NET? Краткое описание,изучаем.
  • Какой язык программирования выбрать? выбираем.
  • C#. С чего начать? начинаем.
  • Защита исходного кода .NET приложений, защищаем.
  • Литература по .NET, обращаемся.
  • FAQ раздела,ищем здесь.
  • Архиполезные ссылки:www.connectionstrings.com, www.pinvoke.net, www.codeproject.com

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс «транслит» если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим 🙂
Так же не забывайте отмечать свой вопрос решенным, если он таковым является 🙂

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »

[ Время генерации скрипта: 0.1174 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Слово "Цвет" и его описание © 2021
Внимание! Информация, опубликованная на сайте, носит исключительно ознакомительный характер и не является рекомендацией к применению. Обязательно проконсультируйтесь с вашим лечащим врачом!