ورود

View Full Version : فایل BITMAP



شفیعی
یک شنبه 21 دی 1382, 21:47 عصر
سلام

به چه روشی می توان روی پیکسل به پیکسل یک فایل BMP عملیات انجام داد در واقع بتوان پیکسل به پیسکل فایل را خواند ویا تغییر داد

SReza1
یک شنبه 21 دی 1382, 21:54 عصر
این دستور رنگ پیکسل انتخابی x, y رو برمیگردونه

mypicture.canvas.pixel[x,y]

شفیعی
یک شنبه 21 دی 1382, 22:08 عصر
سلام
خیلی ممنون
من می خواستم یک برنامه بنویسم که فایل BMP را به فایل DWG تبدیل نماید اگر دراین زمینه مطلبی دارید برایم ارسال نمائید
با تشکر ناصر شفیعی

DataMaster
دوشنبه 22 دی 1382, 06:57 صبح
اکه یه خورده صبر کنی باید بگردم ، فکر کنم به احتمال 50 درصد سورس داشته باشم

Delphi-Clinic
چهارشنبه 24 دی 1382, 17:51 عصر
امیدوارم این کد نظر شما را برآورده سازد.




unit DWGView;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;

type BITMAPINFO256 = RECORD
bmiHeader: BITMAPINFOHEADER;
bmiColors: Array[0..255] of RGBQUAD;
end;

type
TNoPreviewEvent = procedure(Sender: TOBject) of Object;
TFileErrorEvent = procedure(Sender: TOBject; DWGName: String) of Object;

TDWGView = class(TImage)
private
FDWGVersion: String;
FDWGFile: String;
FNoPreviewEvent: TNoPreviewEvent;
FOnFileError: TFileErrorEvent;
FImage: TImage;
procedure SetDWGFile(const Value: String);
procedure SetFImage(const Value: TImage);
{ Private declarations }
protected
procedure ReadDWG;
constructor TDWGView;
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property Image: TImage read FImage write SetFImage;

property DWGFile: String read FDWGFile write SetDWGFile;
property DWGVersion: String read FDWGVersion;
property OnNoPreview : TNoPreviewEvent read FNoPreviewEvent write FNoPreviewEvent;
property OnFileError: TFileErrorEvent read FOnFileError write FOnFileError;
end;

procedure Register;

implementation
procedure Register;
begin
RegisterComponents('Voice', [TDWGView]);
end;

procedure TDWGView.ReadDWG;
Var
DWGF: TFileStream;
MemF: TMemoryStream;
BMPF: TMemoryStream;
SentinelF: TMemoryStream;

bif: BITMAPINFO256;
bfh: BITMAPFILEHEADER;

PosSentinel: LongInt;

LenPreview: Integer;
RasterPreview: ShortInt;


PosBMP: Integer;
LenBMP: Integer;
IndexPreview: Integer;
TypePreview: Shortint;
begin
if Assigned(FOnFileError) then
FOnFileError(Self,FDWGFile);
DWGF := TFileStream.Create(FDWGFile,fmOpenRead);
BMPF := TMemoryStream.Create;
MemF := TMemoryStream.Create;
SentinelF := TMemoryStream.Create;
try
SetLength(FDWGVersion,6);
DWGF.ReadBuffer(FDWGVersion[1],6);
DWGF.Position := 13;
DWGF.Read(PosSentinel, 4);
DWGF.Position := PosSentinel;
SentinelF.CopyFrom(DWGF,16);
DWGF.Read(LenPreview,4);
DWGF.Read(RasterPreview,1);
for IndexPreview := RasterPreview -1 downto 0 do
begin
MemF.Position := 0;
MemF.CopyFrom(DWGF,9);
MemF.Position := 0;
MemF.Read(TypePreview,1);
case TypePreview of
1: ;
2: begin

MemF.Position := 1;
MemF.Read(PosBMP,4); // 2,5
MemF.Read(LenBMP,4); // 6,9
DWGF.Position := PosBMP;
DWGF.ReadBuffer( bif,sizeof(bif));

with bif do
begin
bmiColors[0].rgbBlue := 0;
bmiColors[0].rgbGreen := 0;
bmiColors[0].rgbRed := 0;

bmiColors[225].rgbBlue := 255;
bmiColors[225].rgbGreen := 255;
bmiColors[225].rgbRed := 255;
end;

bfh.bfType := $4D42;
bfh.bfSize := LenBMP + sizeof(bfh);
bfh.bfReserved1 := 0;
bfh.bfReserved2 := 0;
bfh.bfOffBits := 14 + $28 + 1024;

BMPF.Position := 0;
BMPF.Write(bfh,sizeof(bfh));
BMPF.WriteBuffer(bif,sizeof(bif));
BMPF.CopyFrom(DWGF,LenBMP - 1064);
BMPF.Position := 0;
Picture.Bitmap.LoadFromStream(BMPF);
end;
3: ;
end;

end;
finally
SentinelF.Free;
MemF.Free;
DWGF.Free;
BMPF.Free;
end;

end;


procedure TDWGView.SetDWGFile(const Value: String);
begin
FDWGFile := Value;
ReadDWG;
end;

procedure TDWGView.SetFImage(const Value: TImage);
begin
FImage := Value;
end;

constructor TDWGView.TDWGView;
begin
//TODO: Add your source code here
FDWGFile := '';
FDWGVersion := '';
end;

end.



با کمی تغییر میتوانید Bitmap مورد نظر را به DWG نمایید.

شفیعی
چهارشنبه 24 دی 1382, 23:23 عصر
سلام
خیلی ممنون

شفیعی
جمعه 26 دی 1382, 07:31 صبح
سلام
چگونه می توان تعداد پیکسلهای یک فایل را بدست آورد

Delphi-Clinic
شنبه 27 دی 1382, 15:11 عصر
عرض تصویر رو در ارتفاعش ضرب کنی درست می شه:
640*480=37200

شفیعی
شنبه 27 دی 1382, 22:16 عصر
سلام
آقای Delphi-Clinic می توانی در مورد سورسی که در بالا نوشته ای بیشتر توضیح دهی من درست متوجه برنامه نشدم

Delphi-Clinic
یک شنبه 28 دی 1382, 14:40 عصر
با کمک این برنامه می توان Preview فایلهای Dwg رو مشاهده کرد.

شفیعی
سه شنبه 30 دی 1382, 12:40 عصر
سلام
دوست عزیز خیلی ممنون
چطور می توان تعدا رنگ موجود در یک فایل را بدست آورد
به چه روشی می توان رنگهای غیر از رنگ سیاه را به رنگ سفید تبدیل نمود

Delphi-Clinic
سه شنبه 30 دی 1382, 13:07 عصر
Procedure GRAYScaleImage( Immagine : TImage; Grigi : Byte );
Var
Grigio : Byte;
IdX : Integer;
IdY : Integer;
IdZ : Integer;
Begin
For IdY := 0 To ( Immagine.Height - 1 ) Do
For IdX := 0 To ( Immagine.Width - 1 ) Do Begin
Grigio := GetRValue( Immagine.Canvas.Pixels[ IdX, IdY ] ) Div 3 + GetGValue( Immagine.Canvas.Pixels[ IdX, IdY ] ) Div 3 + GetBValue( Immagine.Canvas.Pixels[ IdX, IdY ] ) Div 3;
// Verifica se è nero.
If ( Grigio <= ( 255 Div Grigi ) ) Then
Grigio := 0
Else
// Verifica se è bianco.
If ( Grigio > ( 255 - ( 255 Div Grigi ) ) ) Then
Grigio := 255
Else // Verifica tutti i grigi
For IdZ := 1 To ( Grigi - 2 ) Do
If ( ( Grigio > ( ( 255 Div ( Grigi - 2 ) ) * IdZ ) - ( 255 Div Grigi ) ) And
( Grigio <= ( ( 255 Div ( Grigi - 2 ) ) * IdZ ) + ( 255 Div Grigi ) ) ) Then
Grigio := ( ( 255 Div ( Grigi - 2 ) ) * IdZ );
Immagine.Canvas.Pixels[ IdX, IdY ] := RGB( Grigio, Grigio, Grigio );
End;
End;

شفیعی
جمعه 08 اسفند 1382, 05:08 صبح
سلام
خسته نباشید
بنده دنبال برنامه ای می گردم که بتوان بدون استفاده از اتوکد فایلهای DWG را به DXF تبدیل نمود :oops:

مهندس
پنج شنبه 07 خرداد 1383, 02:11 صبح
:evil: